s90*_*00n 6 python dataframe pandas
假设我有一个很大的数据DataFrame
,但我想专注于其中的选定部分,例如 4 列中的 3 列。如果这些选定的 3 列中至少有 2 个值为空,我想删除整行。
例如,这是我拥有的数据框,我选择的列是['B','C','D']
:
A B C D
1 1
2 2
3 3 3 3
4
Run Code Online (Sandbox Code Playgroud)
如果所选列中至少有两个值(即第二行和第四行)为空,如何删除这些行。
最终数据框是:
A B C D
1 1
3 3 3 3
Run Code Online (Sandbox Code Playgroud)
subset
与thresh
on一起使用dropna
In [2720]: df.dropna(subset=['B','C','D'], thresh=2)
Out[2720]:
A B C D
0 NaN 1.0 NaN 1.0
2 3.0 3.0 3.0 3.0
Run Code Online (Sandbox Code Playgroud)
或者,使用notnull
In [2723]: df[df[['B', 'C', 'D']].notnull().sum(1).ge(2)]
Out[2723]:
A B C D
0 NaN 1.0 NaN 1.0
2 3.0 3.0 3.0 3.0
Run Code Online (Sandbox Code Playgroud)
细节
In [2722]: df
Out[2722]:
A B C D
0 NaN 1.0 NaN 1.0
1 2.0 NaN NaN 2.0
2 3.0 3.0 3.0 3.0
3 4.0 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
如果值是空白而不是 null,请使用df[df[['B', 'C', 'D']].eq('').sum(1).lt(2)]
或df[df[['B', 'C', 'D']].ne('').sum(1).ge(2)]
dropna
如果 s 为空值则使用NaN
:
cols = ['B','C','D']
df = df.dropna(subset=cols, thresh=2)
#same as
#df = df[df[cols].isnull().sum(1) < 2]
print (df)
A B C D
0 NaN 1.0 NaN 1.0
2 3.0 3.0 3.0 3.0
Run Code Online (Sandbox Code Playgroud)
或者,如果空值是空字符串,则比较由 和 过滤器创建values
和过滤的numpy 数组boolean indexing
:
df = df[(df[cols].values == '').sum(axis=1) < 2]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4055 次 |
最近记录: |