删除python中数据框的观察结果

时间:2015-04-20 13:19:44

标签: python pandas dataframe

如何从python中的数据框中删除观察。例如,我有数据框,其中包含变量a,b,c,如果缺少变量a,或者变量c等于零,我会删除观察值。

2 个答案:

答案 0 :(得分:2)

您可以使用isnull构建布尔掩码:

mask = (df['a'].isnull()) | (df['c'] == 0)

然后选择所需的行:

df = df.loc[~mask]

~maskmask的布尔反转,因此df.loc[~mask]选择a不为空的行 c为不是0。


例如,

import numpy as np
import pandas as pd

arr = np.arange(15, dtype='float').reshape(5,3) % 4
arr[arr > 2] = np.nan

df = pd.DataFrame(arr, columns=list('abc'))
#     a   b   c
# 0   0   1   2
# 1 NaN   0   1
# 2   2 NaN   0
# 3   1   2 NaN
# 4   0   1   2

mask = (df['a'].isnull()) | (df['c'] == 0)
df = df.loc[~mask]

产量

   a  b   c
0  0  1   2
3  1  2 NaN
4  0  1   2

答案 1 :(得分:0)

假设你的DataFrame看起来像这样:

In [2]: data = pd.DataFrame({
   ...:     'a': [1,2,3,pd.np.nan,5],
   ...:     'b': [3,4,pd.np.nan,5,6],
   ...:     'c': [0,1,2,3,4],
   ...: })

In [3]: data
Out[3]:
    a   b  c
0   1   3  0
1   2   4  1
2   3 NaN  2
3 NaN   5  3
4   5   6  4

要删除缺少观察值的行,请使用:

In [5]: data.dropna()
Out[5]:
   a  b  c
0  1  3  0
1  2  4  1
4  5  6  4

要删除只有列'a'缺少观察值的行,请使用:

In [6]: data.dropna(subset=['a'])
Out[6]:
   a   b  c
0  1   3  0
1  2   4  1
2  3 NaN  2
4  5   6  4

要删除缺少观察值或零的行,请使用:

In [18]: data[data.all(axis=1)].dropna()
Out[18]:
   a  b  c
1  2  4  1
4  5  6  4