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

问题描述 投票:1回答:1

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

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
python-3.x pandas
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.