熊猫组合多列(使用NoneType)

时间:2018-09-11 13:05:40

标签: python pandas dataframe

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

非常简单,我想将多列组合成一个以分隔的列, 问题在于某些单元格为空(NoneType)

当将它们组合在一起时,我会得到:

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

  1. 添加.map(str)时,它会为每个NoneType值逐字添加“无”(有点儿期望)

假设我有一个生产数据框,看起来像

     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。因此,向您提供任何帮助或朝着正确的方向前进都非常感激!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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