如何提取新的子字符串作为colum colums

时间:2017-09-28 21:12:58

标签: python string pandas csv

我有一个pandas数据帧 一个名为:entity的列 当我通过以下方式打印列时:

df.entity

输出看起来像这样(我有267行,这只是前两行)

[(East, NNP), (India, CTR), (Company, ORG)]
[(Pasteur, ZZP)] 

如何获得输出类似的新列:

East, India, Company
Pasteur

3 个答案:

答案 0 :(得分:2)

使用apply

In [4697]: df.entity.apply(lambda x: ', '.join(t[0] for t in x))
Out[4697]:
0    East, India, Company
1                 Pasteur
Name: entity, dtype: object

详细

                                        entity
0  [(East, NNP), (India, CTR), (Company, ORG)]
1                             [(Pasteur, ZZP)]

答案 1 :(得分:2)

选项1
zip和迭代器

df.assign(entity=[', '.join(next(zip(*r))) for r in df.entity])

                 entity
0  East, India, Company
1               Pasteur

选项2
@ Zero的答案的理解版本。应该更快。

df.assign(entity=[', '.join([x[0] for x in r]) for r in df.entity])

                 entity
0  East, India, Company
1               Pasteur

设置

df = pd.DataFrame(dict(
    entity=[
        [('East', 'NNP'), ('India', 'CTR'), ('Company', 'ORG')],
        [('Pasteur', 'ZZP')]
    ]))

答案 2 :(得分:1)

这是另一种解决方案

df['New']=df.entity.apply(pd.Series).stack().apply(pd.Series).groupby(level=0)[0].agg(lambda x: ','.join(set(x)))
df
Out[74]: 
                                        entity                 New
0  [(East, NNP), (India, CTR), (Company, ORG)]  India,Company,East
1                             [(Pasteur, ZZP)]             Pasteur

数据输入

df=pd.DataFrame({'entity':[[('East', 'NNP'), ('India', 'CTR'), ('Company', 'ORG')],[('Pasteur', 'ZZP')] ]})