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

2024-04-19 19:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从python框架中删除观察数据。例如,我有一个包含变量a、b、c的数据框,如果变量a丢失,或者变量c等于零,我将删除观察值。在


Tags: 数据框架
2条回答

假设您的数据帧如下所示:

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

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

^{pr2}$

若要删除只有列“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

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

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

然后选择所需的行:

^{pr2}$

~maskmask的布尔逆,因此df.loc[~mask]选择a不为nullc不为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

相关问题 更多 >