Max*_*axU 191
更新:使用Pandas 0.22.0
较新的Pandas版本有新方法'DataFrame.isna()'和'DataFrame.notna()'
In [71]: df
Out[71]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [72]: df.isna().any()
Out[72]:
a True
b True
c False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
作为列的列表:
In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']
Run Code Online (Sandbox Code Playgroud)
选择那些列(包含至少一个NaN值):
In [73]: df.loc[:, df.isna().any()]
Out[73]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
Run Code Online (Sandbox Code Playgroud)
老答案:
尝试使用isnull():
In [97]: df
Out[97]:
a b c
0 NaN 7.0 0
1 0.0 NaN 4
2 2.0 NaN 4
3 1.0 7.0 0
4 1.0 3.0 9
5 7.0 4.0 9
6 2.0 6.0 9
7 9.0 6.0 4
8 3.0 0.0 9
9 9.0 0.0 1
In [98]: pd.isnull(df).sum() > 0
Out[98]:
a True
b True
c False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
或者@root提出更清晰的版本:
In [5]: df.isnull().any()
Out[5]:
a True
b True
c False
dtype: bool
In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']
Run Code Online (Sandbox Code Playgroud)
选择子集 - 包含至少一个NaN值的所有列:
In [31]: df.loc[:, df.isnull().any()]
Out[31]:
a b
0 NaN 7.0
1 0.0 NaN
2 2.0 NaN
3 1.0 7.0
4 1.0 3.0
5 7.0 4.0
6 2.0 6.0
7 9.0 6.0
8 3.0 0.0
9 9.0 0.0
Run Code Online (Sandbox Code Playgroud)
小智 14
我有一个问题,我必须在屏幕上对许多列进行目视检查,因此筛选并返回违规列的候选列表是
nan_cols = [i for i in df.columns if df[i].isnull().any()]
Run Code Online (Sandbox Code Playgroud)
如果这对任何人有帮助
除此之外,如果您想过滤掉 nan 值超过阈值的列,比如 85% 然后使用
nan_cols85 = [i for i in df.columns if df[i].isnull().sum() > 0.85*len(data)]
我知道这是一个很好回答的问题,但我想稍微调整一下。此答案仅返回包含空值的列,并且仍然显示空值的计数。
pd.isnull(df).sum()[pd.isnull(df).sum() > 0]
Run Code Online (Sandbox Code Playgroud)
null_count_ser = pd.isnull(df).sum()
Run Code Online (Sandbox Code Playgroud)
is_null_ser = null_count_ser > 0
Run Code Online (Sandbox Code Playgroud)
null_count_ser[is_null_ser]
Run Code Online (Sandbox Code Playgroud)
name 5
phone 187
age 644
Run Code Online (Sandbox Code Playgroud)
这对我有用,
1. 用于获取至少具有 1 个空值的列。(列名)
data.columns[data.isnull().any()]
Run Code Online (Sandbox Code Playgroud)
2. 用于获取带计数的列,至少有 1 个空值。
data[data.columns[data.isnull().any()]].isnull().sum()
Run Code Online (Sandbox Code Playgroud)
[可选] 3. 用于获取空计数的百分比。
data[data.columns[data.isnull().any()]].isnull().sum() * 100 / data.shape[0]
Run Code Online (Sandbox Code Playgroud)
在具有大量列的数据集中,最好查看有多少列包含空值,有多少不包含空值。
print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))
print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))
print("Total no. of columns in the dataframe")
print(len(df.columns))
Run Code Online (Sandbox Code Playgroud)
例如,在我的数据框中,它包含 82 列,其中 19 列包含至少一个空值。
此外,您还可以根据哪些具有更多空值自动删除列和行
这是智能执行此操作的代码:
df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码删除了所有的空值。如果您想要空值,请先处理它们。