转换输入字符串:不列出?

时间:2019-01-18 09:51:52

标签: pandas list transform

我有以下要转换的示例DataFrame:

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 [冒险,非洲象,动物,球类游戏...]

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

所需的输出:

出局:

  

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 个答案:

答案 0 :(得分:1)

仅将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...

答案 1 :(得分:1)

以防万一,也许熊猫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