如何从python中的数据框中删除观察。例如,我有数据框,其中包含变量a,b,c,如果缺少变量a,或者变量c等于零,我会删除观察值。
答案 0 :(得分:2)
您可以使用isnull
构建布尔掩码:
mask = (df['a'].isnull()) | (df['c'] == 0)
然后选择所需的行:
df = df.loc[~mask]
~mask
是mask
的布尔反转,因此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