连接Pandas DataFrame中的列值,用逗号替换“ NaN”值

时间:2020-02-13 06:46:52

标签: python python-3.x pandas dataframe

我正在尝试将Pandas DataFrame列连接起来,用逗号替换“ NaN”值。

df = pd.DataFrame({'col1' : ["1","2","3","4","5",np.nan],
                   'col2'  : ["p1","p2","p1",np.nan,"p2",np.nan], 
                   'col3' : ["A","B","C","D","E","F"]})


df


 col1    col2  col3
0    1    p1    A
1    2    p2    B
2    3    p1    C
3    4    NaN   D
4    5    p2    E
5    NaN  NaN   F

我需要一个输出:-

   col1  col2  col3  col4
0    1    p1    A    1, p1, A
1    2    p2    B    2, p2, B
2    3    p1    C    3, p1, C
3    4    NaN   D    4, , D
4    5    p2    E    5, p2, E
5    NaN  NaN   F     , , F

基本上,col4中的每一行都需要使用相同数量的逗号。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:3)

将丢失的值替换为DataFrame.fillna,然后每行使用join

df['col4'] = df.astype(str).fillna('').apply(', '.join, axis=1)

或添加,并使用sum进行加入,最后通过Series.str.rstrip删除最后一个,

df['col4'] = df.astype(str).fillna('').add(', ').sum(axis=1).str.rstrip(', ')

或分别处理每列:

df['col4'] = (df['col1'].astype(str).fillna('') + ', ' + 
              df['col2'].astype(str).fillna('') + ', ' + 
              df['col3'].astype(str))

print (df)
  col1 col2 col3      col4
0    1   p1    A  1, p1, A
1    2   p2    B  2, p2, B
2    3   p1    C  3, p1, C
3    4  NaN    D    4, , D
4    5   p2    E  5, p2, E
5  NaN  NaN    F     , , F