代码之家  ›  专栏  ›  技术社区  ›  Christopher

转换输入字符串:取消列表?

  •  0
  • Christopher  · 技术社区  · 5 年前

    我有以下我喜欢转换的示例数据帧:

    import pandas as pd
    import re
    d = {'example' : pd.Series(["['Adventure' 'African elephant' 'Animal' 'Ball game' 'Bay' 'Body of water' 'Communication Device' 'Electronic device']"])}
    df = pd.DataFrame(d)
    df.example = [[w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())] for x in tqdm(df.example)]
    df
    

    出:

    0[冒险,非洲大象,动物,球类游戏…]

    转换(和数据输入)本身是正确的,但是,如何转换数据帧中的每一行,使每一行不是一个列表,而是一个简单的标记字符串?

    期望输出:

    出:

    0冒险,非洲大象,动物,球类游戏…

    我试过:

    df.example = [(w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())) for x in tqdm(df.example)]
    

    但是,这又回来了 <generator object <listcomp>.<genexpr> at 0x11...

    2 回复  |  直到 5 年前
        1
  •  1
  •   jezrael    5 年前

    只添加 join 发电机:

    df.example = [', '.join(w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower()))
                  for x in (df.example)]
    
    print (df)
                                                 example
    0  adventure, african_elephant, animal, ball_game...
    
        2
  •  1
  •   Juan Kania-Morales    5 年前

    以防万一,熊猫str.join可能对未来有用;-)
    1)在示例数据框中添加第二行
    2)未修改发电机
    3)增加了一行:

        df['example'] = df['example'].str.join(',')
    

    工作示例:

    import pandas as pd
    import re
    d = {
        'example' : pd.Series([
            "['a' 'b c' 'd' 'e f' 'g' 'h i j' 'k l' 'm n']",
            "['a' 'b c' 'd']"
        ]),
    }
    df = pd.DataFrame(d)
    display(df)
        example
    0   ['a' 'b c' 'd' 'e f' 'g' 'h i j' 'k l' 'm n']
    1   ['a' 'b c' 'd']
    
    df.example = [[w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())] for x in tqdm(df.example)]
    df['example'] = df['example'].str.join(',')
    display(df)
        example
    0   a,b_c,d,e_f,g,h_i_j,k_l,m_n
    1   a,b_c,d