在Python Pandas中,检查DataFrame是否有一个(或多个)NaN值的最佳方法是什么?
我知道函数pd。isnan,但这将返回每个元素的布尔值的DataFrame。这篇文章也没有完全回答我的问题。
在Python Pandas中,检查DataFrame是否有一个(或多个)NaN值的最佳方法是什么?
我知道函数pd。isnan,但这将返回每个元素的布尔值的DataFrame。这篇文章也没有完全回答我的问题。
当前回答
试试下面的方法
df.isnull().sum()
or
df.isna().values.any()
其他回答
df.isnull().sum()
这将为您提供DataFrame各列中所有NaN值的计数。
Jwilner的回答是正确的。我正在探索是否有更快的选择,因为根据我的经验,平坦数组的和(奇怪地)比计数快。这段代码似乎更快:
df.isnull().values.any()
import numpy as np
import pandas as pd
import perfplot
def setup(n):
df = pd.DataFrame(np.random.randn(n))
df[df > 0.9] = np.nan
return df
def isnull_any(df):
return df.isnull().any()
def isnull_values_sum(df):
return df.isnull().values.sum() > 0
def isnull_sum(df):
return df.isnull().sum() > 0
def isnull_values_any(df):
return df.isnull().values.any()
perfplot.save(
"out.png",
setup=setup,
kernels=[isnull_any, isnull_values_sum, isnull_sum, isnull_values_any],
n_range=[2 ** k for k in range(25)],
)
df.isnull().sum().sum()有点慢,但当然,它有额外的信息——nan的数量。
条形表示缺少的值
import missingno
missingno.bar(df)# will give you exact no of values and values missing
为此,我们可以使用df.isna().any()语句。这将检查我们所有的列,如果有任何缺失值或nan返回True,如果没有缺失值则返回False。
df为Pandas数据框架的名称,任意值为numpy。Nan为空值。
如果你想查看哪些列有空,哪些没有(只有True和False) .any df.isnull () () 如果您只想查看有空值的列 df。loc [: df.isnull () .any ()] .columns 如果您想查看每一列中null的计数 .sum df.isna () () 如果您想查看每一列中空的百分比 .sum df.isna () () / (len (df)) * 100 如果你想查看只有空值的列中空值的百分比:
df.loc[:,list(df.loc[:,df.isnull().any()].columns)].isnull().sum()/(len(df))*100
编辑1:
如果你想从视觉上看到数据缺失的地方:
import missingno
missingdata_df = df.columns[df.isnull().any()].tolist()
missingno.matrix(df[missingdata_df])