Pandas组合多个列(使用NoneType)

问题描述 投票:1回答:2

如果以前有人问过/回答过,我很抱歉,经过一段时间的搜索,我找不到这个问题的答案。

非常简单地把我想把多个列组合成一个用a分隔的,问题是有些单元格是空的(NoneType)

组合它们时,我得到:

  1. TypeError :('序列项3:预期的str实例,找到NoneType','发生在索引0')

要么

  1. 当添加.map(str)时,它会为每个NoneType值添加'None'(如预期的那样)

假设我的生产数据框看起来像

     0        1        2
1   Rice
2   Beans    Rice
3   Milk     Beans   Rice
4   Sugar    Rice

我想要的是带有值的单列

    Production
1   Rice
2   Beans, Rice
3   Milk, Beans, Rice
4   Sugar, Rice

通过一些搜索和调整,我添加了以下代码:

testColumn = productionFrame.iloc[::].apply(lambda x: ', '.join(x)), axis=1)

哪会产生问题1

或改变它:

testColumn = productionFrame.iloc[::].apply(lambda x: ', '.join(x.map(str)), axis=1)

这会产生问题2

也许最好补充说我现在很新,有点探索Pandas / Python。因此,非常感谢任何帮助或推动正确的方向!

python pandas dataframe
2个回答
2
投票

pd.Series.str.cat应该在这里工作

df
Out[43]: 
       0      1     2
1   Rice    NaN   NaN
2  Beans   Rice   NaN
3   Milk  Beans  Rice
4  Sugar   Rice   NaN

df.apply(lambda x: x.str.cat(sep=', '), axis=1)
Out[44]: 
1                 Rice
2          Beans, Rice
3    Milk, Beans, Rice
4          Sugar, Rice
dtype: object

0
投票

在将str.join值转换为空字符串后,您可以使用NaN

res = df.fillna('').apply(lambda x: ', '.join(filter(None, x)), axis=1)

print(res)

0                 Rice
1          Beans, Rice
2    Milk, Beans, Rice
3          Sugar, Rice
dtype: object
© www.soinside.com 2019 - 2024. All rights reserved.