Pandas - 使用其他列中的值替换NaN值

时间:2016-05-31 23:55:33

标签: python pandas

我最近开始使用大熊猫,我正在尝试对数据进行一些简单的清理工作。到目前为止,我已经了解到使用大熊猫时会有很多单行。所以我在寻找一个我的情况。我有DataFrame这样的话:

    C0          C1    C2         C3        C4
    3789507     2010   NaN        NaN        NaN  
    3789508      NaN   NaN       2010        NaN  
    3789509      NaN   NaN       2016        NaN  
    3789510      NaN  2014        NaN        NaN
    3789511      NaN   NaN        NaN      2014

我想结束这样的事情:

C0          C1
3789507     2010
3789508     2010
3789509     2016
3789510     2014
3789511     2014

我现在正在做的只是:

k = df.C1.isnull()
df.C1[k] = df.C2[k]
k = df.C1.isnull()
df.C1[k] = df.C3[k]
k = df.C1.isnull()
df.C1[k] = df.C4[k]

它正在工作,但不是最好的解决方案。如果我有100个列,该怎么办?这里的循环只是解决方案吗?

以防我的for循环看起来像这样:

for i in range(2,len(df.columns)):
    k = df.C1.isnull()
    df.C1[k] = df.ix[:,i]

1 个答案:

答案 0 :(得分:1)

Pandas有一些回填和转发缺失值的方法,所以你可以这样做:

df['C1'] = df.bfill(axis='columns')['C1']

df
Out[10]: 
        C0      C1      C2      C3      C4
0  3789507  2010.0     NaN     NaN     NaN
1  3789508  2010.0     NaN  2010.0     NaN
2  3789509  2016.0     NaN  2016.0     NaN
3  3789510  2014.0  2014.0     NaN     NaN
4  3789511  2014.0     NaN     NaN  2014.0

这适用于您的简单示例数据,但在真实数据集中,您可能必须限制正在回填的列,如:

fill_cols = ['C1', 'C2', 'C3', 'C4']
df['C1'] = df[fill_cols].bfill(axis='columns')['C1']