Python 熊猫将行放在包含';na';
我有一个数据框架,比如说,有4列Python 熊猫将行放在包含';na';,python,pandas,Python,Pandas,我有一个数据框架,比如说,有4列[[['a','b','c','d']],我在其中添加另一列['total'],其中包含每行所有其他列的总和。然后,我添加另一个列['growth of total'],其中包含总量的增长率 [[['a'、'b'、'c'、'd']]中的某些值为空,导致['total']列对这些行无效。我可以使用df.dropna(how='any')轻松摆脱这些行 但是,我的增长率不仅对[['a'、'b'、'c'、'd']]中缺少值的行无效,而且对以下行无效。如何删除所有这些行?
[[['a','b','c','d']]
,我在其中添加另一列['total']
,其中包含每行所有其他列的总和。然后,我添加另一个列['growth of total']
,其中包含总量的增长率
[[['a'、'b'、'c'、'd']]
中的某些值为空,导致['total']
列对这些行无效。我可以使用df.dropna(how='any')轻松摆脱这些行
但是,我的增长率不仅对
[['a'、'b'、'c'、'd']]
中缺少值的行无效,而且对以下行无效。如何删除所有这些行?我认为有一个选项符合您的要求:
In [76]: df = pd.DataFrame(np.arange(40).reshape(10,4))
In [77]: df.ix[1,2] = np.nan
In [78]: df.ix[6,1] = np.nan
In [79]: df['total'] = df.sum(axis=1, skipna=False)
In [80]: df
Out[80]:
0 1 2 3 total
0 0 1 2 3 6
1 4 5 NaN 7 NaN
2 8 9 10 11 38
3 12 13 14 15 54
4 16 17 18 19 70
5 20 21 22 23 86
6 24 NaN 26 27 NaN
7 28 29 30 31 118
8 32 33 34 35 134
9 36 37 38 39 150
In [81]: df['growth'] = df['total'].iloc[1:] - df['total'].values[:-1]
In [82]: df
Out[82]:
0 1 2 3 total growth
0 0 1 2 3 6 NaN
1 4 5 NaN 7 NaN NaN
2 8 9 10 11 38 NaN
3 12 13 14 15 54 16
4 16 17 18 19 70 16
5 20 21 22 23 86 16
6 24 NaN 26 27 NaN NaN
7 28 29 30 31 118 NaN
8 32 33 34 35 134 16
9 36 37 38 39 150 16
IIUC正确的话,您可以使用
notnull
和all
来屏蔽任何带有NaN
的行以及NaN
行之后的行:
In [43]:
df = pd.DataFrame({'a':[0,np.NaN, 2, 3,np.NaN], 'b':[np.NaN, 1,2,3,4], 'c':[0, np.NaN,2,3,4]})
df
Out[43]:
a b c
0 0 NaN 0
1 NaN 1 NaN
2 2 2 2
3 3 3 3
4 NaN 4 4
In [44]:
df[df.notnull().all(axis=1) & df.shift().notnull().all(axis=1)]
Out[44]:
a b c
3 3 3 3
你能不能不把它们填入df.fillna(0)?然后把它们加起来?我不知道你的意思。我已经处理了值为空的行。我的问题是,我还需要去掉带有空值的行后面的每一行。