我有一个熊猫数据框,其col_3为df['col_1].map(str) +','+df['col_2].map(str)
col_1 col_2 col_3
abccd ['abccd','nan']
mmdf Hgfg ['mmdf','Hgfg']
abccd ddsx ['abccd','ddsx']
hhdy ['hhdy','nan']
很显然,由于Col_2为空白,正在创建“ nan”。
我的问题是:如何用Col_1值替换“ nan”,即,当Col_2值为空时,Col_3将为df['col_1].map(str) +','+df['col_1].map(str)
请帮助
答案 0 :(得分:1)
使用df.replace()
df['col_3'] = df['col_1'].map(str) +','+df['col_2'].replace(np.nan, df['col_1']).map(str)
根据您的输出,如果df ['col_2']中的值不是np.nan,则可能需要替换为空字符串而不是np.nan
答案 1 :(得分:1)
一个适当的解决方案取决于您要使用一系列字符串还是一系列列表。您可以在第一种情况下使用fillna
,在第二种情况下使用ffill
:
df = pd.DataFrame({'col_1': ['abccd', 'mmdf', 'abccd', 'hhdy'],
'col_2': [np.nan, 'Hgfg', 'ddsx', np.nan]})
df['col_3'] = df['col_1'].map(str) + ',' + df['col_2'].fillna(df['col_1']).map(str)
df['col_4'] = df[['col_1', 'col_2']].ffill(1).values.tolist()
print(df)
col_1 col_2 col_3 col_4
0 abccd NaN abccd,abccd [abccd, abccd]
1 mmdf Hgfg mmdf,Hgfg [mmdf, Hgfg]
2 abccd ddsx abccd,ddsx [abccd, ddsx]
3 hhdy NaN hhdy,hhdy [hhdy, hhdy]
通常使用免责声明:您应该尝试避免在pd.Series
对象中使用列表,因为您现在在object
dtype系列中有2层指针。