【问题标题】:Concatenate multiple pandas columns with carriage return and blank rows用回车符和空白行连接多个熊猫列
【发布时间】:2018-04-10 16:47:31
【问题描述】:

我正在尝试在 pandas DataFrame 中连接多个列,所有字符串;形成一个新的列。我正在使用 .str.cat 以便我可以在列之间包含回车以进行连接。

但是,如果一行中的任何列为空白或 NaN,我将得到 NaN 作为该行的完整结果。

我查看了选项,第三个答案看起来很有趣: pandas combine two strings ignore nan values

但是我看不到将其扩展到> 2列但仍然不是DataFrame的所有列的方法,这是必需的。

前两个答案不允许添加回车,这也是必需的。

这是我的代码:

mydf['Address'] = mydf['full name'].str.cat(mydf['Delivery address 1'], sep ='\n').str.cat(mydf['Delivery address 2'], sep ='\n').str.cat(mydf['Delivery city'], sep ='\n').str.cat(mydf['Delivery state'], sep ='\n').str.cat(mydf['Delivery postcode'], sep ='\n')

对于任何字段为空白的任何行,这都会导致空白mydf['Address']

我的代码或方法有什么错误?

【问题讨论】:

标签: python string pandas


【解决方案1】:

我认为您需要applyaxis=1 用于逐行处理,dropna 用于删除NaNs:

#columns for join
cols = ['full name','Delivery address 1','Delivery address 2',
        'Delivery city','Delivery state','Delivery postcode']

mydf['Address'] = mydf[cols].apply(lambda x: '\n'.join(x.dropna()), axis=1)

如果某些列是数字:

mydf['Address'] = mydf[cols].apply(lambda x: '\n'.join(x.dropna().astype(str)), axis=1)

【讨论】:

    【解决方案2】:

    这绝对不是执行您所要求的最有效的方法,但您始终可以遍历数据库的行并将所有字符串连接在一起。这是一些伪代码

    for row in your_database:
        your_database[new_column] = "\n".join([list of columns you want])
    

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 2018-05-10
      • 2016-12-31
      • 2012-08-05
      相关资源
      最近更新 更多