列值替换

时间:2018-10-20 18:18:44

标签: python pandas

我有一个熊猫数据框,其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) 请帮助

2 个答案:

答案 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层指针。