我最近开始使用大熊猫,我正在尝试对数据进行一些简单的清理工作。到目前为止,我已经了解到使用大熊猫时会有很多单行。所以我在寻找一个我的情况。我有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]
答案 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']