我正在尝试将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
中的每一行都需要使用相同数量的逗号。
非常感谢您的帮助
答案 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