【问题标题】:How can I join tuples to strings in a Pandas dataframe? [duplicate]如何将元组连接到 Pandas 数据框中的字符串? [复制]
【发布时间】:2020-01-30 19:21:01
【问题描述】:

我正在尝试在我的 pandas 数据框的一列中加入元组,并将该字符串放在一个新的单独列中。

例如:

df = pd.DataFrame({'Number': ['001', '002', '003'],
                   'Tuple': [('hey', 'you'), ('you', 'can'), ('can', 'go')]})

我已经使用以下方法测试了联接:

' '.join(_df.Tuple[0])

输出如下:

'hey you';

但是,当我尝试将其扩展到数据框中 Tuple 列的其余部分时:

df['String'] = ' '.join([entry for entry in df.Tuple])

我收到一个类型错误:TypeError: sequence item 0: expected str instance, tuple found。当我查看此错误时,我看到了一个适用于列表但不适用于数据框的示例。如何遍历数据框,加入每行中的元组并将这些字符串放入新列?

【问题讨论】:

    标签: python pandas tuples


    【解决方案1】:

    它不起作用的原因是你的列表理解返回不可变的元组:

    这个([entry for entry in df.Tuple])

    返回

    [('hey', 'you'), ('you', 'can'), ('can', 'go')]
    

    一种更简单的方法是在行级别的元组中的每个项目上使用聚合方法。

    df['Tuple'].agg(' '.join)
    
    out:
    0    hey you
    1    you can
    2     can go
    Name: Tuple, dtype: object
    

    【讨论】:

    • 来自 OP 方法:df.Tuple = [' '.join(entry) for entry in df.Tuple](作为 OP 的注释)
    • 这适用于我的示例数据框,但在我的实际数据框上出现了一个新错误,即 TypeError: 'float' object is not iterable。我不能真正将其共享为专有的,甚至不确定如何使用测试数据框复制错误。感谢您的帮助和快速回答!
    • 在@nellac77 之前添加fillna(' ') 或过滤掉NA 行
    【解决方案2】:

    你可以试试这样的:

    df['String'] = df['Tuple'].apply(lambda x: ' '.join(x))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2013-02-04
      • 2014-08-05
      • 2014-04-24
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多