如何用系列的值替换数据框的Nan?

时间:2019-04-18 19:22:08

标签: python-3.x pandas

我有一个序列和包含14列的数据框,如果数据框具有Nan值,则需要用序列值替换该数据框值。 (逐行)

average= ref_series.iloc[:,len_of_ref_series[0]-wks:len_of_ref_series[0]].mean(axis=1)

ref_series = ref_series.fillna(average, axis='index')

print(ref_series)

平均值是一个序列:

0    360.000000
1    400.000000
2    386.666667

ref_series是一个数据框:

W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13    QTR
0  120  240  360  480  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1  120  240  360  600  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2  110  220  500  440  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

我的预期结果:

W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13  QTR
0  120  240  360  480  360  360  360  360  360  360  360  360  360  360
1  120  240  360  600  400  400  400  400  400  400  400  400  400  400
2  110  220  500  440  386  386  386  386  386  386  386  386  386  386

1 个答案:

答案 0 :(得分:1)

执行isna检查,以确定哪些列在每行中都具有NaN。

df.columns[df.isna().all(axis=0)]
# Index(['W05', 'W06', 'W07', 'W08', 'W09', 
#        'W10', 'W11', 'W12', 'W13', 'QTR'], dtype='object')

您可以使用此结果,使用df.assign将均值分配给那些列:

df = df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s))

或者,作为整数列,

df.assign(**dict.fromkeys(df.columns[df.isna().all(axis=0)], s.astype(int)))

   W01  W02  W03  W04  W05  W06  W07  W08  W09  W10  W11  W12  W13  QTR
0  120  240  360  480  360  360  360  360  360  360  360  360  360  360
1  120  240  360  600  400  400  400  400  400  400  400  400  400  400
2  110  220  500  440  386  386  386  386  386  386  386  386  386  386