jwilner 's response is spot on. I was exploring to see if there'是一个更快的选择,因为根据我的经验,求平面阵列(奇怪地)比计数更快 . 这段代码似乎更快:
df.isnull().values.any()
例如:
In [2]: df = pd.DataFrame(np.random.randn(1000,1000))
In [3]: df[df > 0.9] = pd.np.nan
In [4]: %timeit df.isnull().any().any()
100 loops, best of 3: 14.7 ms per loop
In [5]: %timeit df.isnull().values.sum()
100 loops, best of 3: 2.15 ms per loop
In [6]: %timeit df.isnull().sum().sum()
100 loops, best of 3: 18 ms per loop
In [7]: %timeit df.isnull().values.any()
1000 loops, best of 3: 948 µs per loop
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,6))
# Make a few areas have NaN values
df.iloc[1:3,1] = np.nan
df.iloc[5,3] = np.nan
df.iloc[7:9,5] = np.nan
12 回答
由于
pandas
必须为DataFrame.dropna()
找到它,我看了看它们是如何实现它的,并发现它们使用DataFrame.count()
,它计算DataFrame
中的所有非空值 . 参看pandas source code . 我没有对这种技术进行基准测试,但我认为图书馆的作者可能已经做了明智的选择 .jwilner 's response is spot on. I was exploring to see if there'是一个更快的选择,因为根据我的经验,求平面阵列(奇怪地)比计数更快 . 这段代码似乎更快:
例如:
df.isnull().sum().sum()
有点慢,但当然还有其他信息 -NaNs
的数量 .要找出特定列中哪些行具有NaN:
根据您正在处理的数据类型,您还可以通过将dropna设置为False来获取执行EDA时每列的值计数 .
适用于分类变量,而不是在有许多唯一值时 .
由于没有人提到,只有另一个名为
hasnans
的变量 .如果pandas Series中的一个或多个值为NaN,
df[i].hasnans
将输出到True
,否则为False
. 请注意,它不是一个功能 .熊猫版'0.19.2'和'0.20.2'
只需使用math.isnan(x),如果x是NaN(不是数字),则返回True,否则返回False .
或者您可以在
DF
上使用.info()
,例如:df.info(null_counts=True)
返回列中的non_null行数,例如:如果你需要知道“一个或多个
NaN
s”有多少行:或者,如果您需要提取这些行并检查它们:
你有几个选择 .
现在数据框看起来像这样:
df.isnull().any().any()
- 返回一个布尔值你知道
isnull()
会返回一个像这样的数据帧:如果您将其设为
df.isnull().any()
,则只能找到具有NaN
值的列:还有一个
.any()
会告诉你是否有以上任何一个True
df.isnull().sum().sum()
- 返回NaN
值总数的整数:这与
.any().any()
的操作方式相同,首先给出一列中NaN
值的总和,然后是这些值的总和:最后,要获取DataFrame中NaN值的总数:
这是另一种有趣的方法,即找到null并用计算值替换
df.isnull().any().any()
应该这样做 .添加到Hobs的精彩答案,我对Python和Pandas都很陌生,所以请指出我是不是错了 .
要找出哪些行具有NaN:
通过将any()的轴指定为1来检查行中是否存在“True”,将执行相同的操作而无需转置 .