【问题标题】:How to extract new substring as column columns如何将新子字符串提取为列
【发布时间】:2018-03-10 17:50:58
【问题描述】:

我有一个熊猫数据框 一个名为:实体的列 当我通过以下方式打印列时:

df.entity

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

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

我怎样才能得到一个新列的输出是这样的:

East, India, Company
Pasteur

【问题讨论】:

    标签: python string pandas csv


    【解决方案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')] ]})
    

    【讨论】:

    • TypeError: Argument 'obj' has wrong type (expected list, got Tree) 我收到这个错误
    • @jenniferruurs 添加了我的输入数据
    【解决方案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')]
        ]))
    

    【讨论】:

    • 两个for loop :) 不错
    • @Zero 功能相同,但我几乎总是使用对apply 的理解
    【解决方案3】:

    使用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
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2011-11-17
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多