在列的子集中删除nan

时间:2018-01-25 14:42:13

标签: python pandas dataframe nan

我有一个数据框

df with columns=['ID','Region','Day 1','Day 2','Day 3','Day 4','Day 5']

如何在'Day 1','Day 2','Day 3','Day 4','Day 5'列中删除包含NaN的行?

我想使用"从第1天到第5天"

df.dropna(axis=0, how='all', thresh=None, subset=['Day 1':'Day 5'], inplace=True)

但上面的代码似乎无法正常工作

1 个答案:

答案 0 :(得分:0)

您必须重复所有列,例如由:

c = ['Day {}'.format(x) for x in range(1 , 6)]
print (c)
['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5']

或者:

c = df.loc[:, 'Day 1':'Day 5'].columns
df.dropna(axis=0, how='all', thresh=None, subset=c, inplace=True)

<强>示例

df = pd.DataFrame({'ID':list('abcdef'),
                   'Region':[np.nan,5,4,5,5,4],
                   'Day 1':[7,8,9,4,2,np.nan],
                   'Day 2':[1,3,5,7,1,np.nan],
                   'Day 3':[np.nan] * 6,
                   'Day 4':[5,3,6,9,2,np.nan],
                   'Day 5':[5,3,6,9,2,np.nan]})

print (df)
   Day 1  Day 2  Day 3  Day 4  Day 5 ID  Region
0    7.0    1.0    NaN    5.0    5.0  a     NaN
1    8.0    3.0    NaN    3.0    3.0  b     5.0
2    9.0    5.0    NaN    6.0    6.0  c     4.0
3    4.0    7.0    NaN    9.0    9.0  d     5.0
4    2.0    1.0    NaN    2.0    2.0  e     5.0
5    NaN    NaN    NaN    NaN    NaN  f     4.0

c = df.loc[:, 'Day 1':'Day 5'].columns
df.dropna(axis=0, how='all', thresh=None, subset=c, inplace=True)
print (df)
   Day 1  Day 2  Day 3  Day 4  Day 5 ID  Region
0    7.0    1.0    NaN    5.0    5.0  a     NaN
1    8.0    3.0    NaN    3.0    3.0  b     5.0
2    9.0    5.0    NaN    6.0    6.0  c     4.0
3    4.0    7.0    NaN    9.0    9.0  d     5.0
4    2.0    1.0    NaN    2.0    2.0  e     5.0