在Pandas DataFrame中计算缺少值的行数的最佳方法

user2489252:

我目前想出了一些方法来计算熊猫中缺失值的数量DataFrame这些都很难看,我想知道是否有更好的方法可以做到。

让我们创建一个示例DataFrame

from numpy.random import randn
df = pd.DataFrame(randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],
               columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

在此处输入图片说明

我现在有的是

a)计数缺少值的单元格:

>>> sum(df.isnull().values.ravel())
9

b)计算某处缺少值的行:

>>> sum([True for idx,row in df.iterrows() if any(row.isnull())])
3
EdChum:

对于第二个计数,我认为只需从以下方法返回的行数中减去行数dropna

In [14]:

from numpy.random import randn
df = pd.DataFrame(randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],
               columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
df
Out[14]:
        one       two     three
a -0.209453 -0.881878  3.146375
b       NaN       NaN       NaN
c  0.049383 -0.698410 -0.482013
d       NaN       NaN       NaN
e -0.140198 -1.285411  0.547451
f -0.219877  0.022055 -2.116037
g       NaN       NaN       NaN
h -0.224695 -0.025628 -0.703680
In [18]:

df.shape[0] - df.dropna().shape[0]
Out[18]:
3

第一个可以使用内置方法来实现:

In [30]:

df.isnull().values.ravel().sum()
Out[30]:
9

时机

In [34]:

%timeit sum([True for idx,row in df.iterrows() if any(row.isnull())])
%timeit df.shape[0] - df.dropna().shape[0]
%timeit sum(map(any, df.apply(pd.isnull)))
1000 loops, best of 3: 1.55 ms per loop
1000 loops, best of 3: 1.11 ms per loop
1000 loops, best of 3: 1.82 ms per loop
In [33]:

%timeit sum(df.isnull().values.ravel())
%timeit df.isnull().values.ravel().sum()
%timeit df.isnull().sum().sum()
1000 loops, best of 3: 215 µs per loop
1000 loops, best of 3: 210 µs per loop
1000 loops, best of 3: 605 µs per loop

因此,对于这种尺寸的df,我的选择要快一些

更新资料

因此,对于具有80,000行的df,我得到以下信息:

In [39]:

%timeit sum([True for idx,row in df.iterrows() if any(row.isnull())])
%timeit df.shape[0] - df.dropna().shape[0]
%timeit sum(map(any, df.apply(pd.isnull)))
%timeit np.count_nonzero(df.isnull())
1 loops, best of 3: 9.33 s per loop
100 loops, best of 3: 6.61 ms per loop
100 loops, best of 3: 3.84 ms per loop
1000 loops, best of 3: 395 µs per loop
In [40]:

%timeit sum(df.isnull().values.ravel())
%timeit df.isnull().values.ravel().sum()
%timeit df.isnull().sum().sum()
%timeit np.count_nonzero(df.isnull().values.ravel())
1000 loops, best of 3: 675 µs per loop
1000 loops, best of 3: 679 µs per loop
100 loops, best of 3: 6.56 ms per loop
1000 loops, best of 3: 368 µs per loop

其实np.count_nonzero赢得了这一手。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算pandas DataFrame中的nan值?

在Pandas DataFrame中计算重复值

在Python Pandas DataFrame中交换值以清理数据的最佳方法是什么

在Pandas groupby中计算唯一索引值

在Pandas DataFrame中计算父级总计的份额

在Pandas DataFrame中以每列的行数计算重复项

在Pandas Dataframe中计算NaN,但忽略领先者

在Pandas中计算最小值后查看缺失列的方法

迭代构造Pandas DataFrame的最佳方法

Pandas Dataframe根据行数设置列值

根据对列中每个不同值具有特定条件的行,在Pandas Dataframe中计算perc

用于在Pandas中计算复杂项的Python方法(值大于或等于数字除以列表长度)

遍历Pandas Dataframe的最佳方法?

在Pandas Dataframe的行数组中查找重复的值

遍历pandas DataFrame以计算新的行值

在Pandas DataFrame中计算价格变化

在Python Pandas中的DataFrame中计算到某个日期的天数?

在Pandas数据框中计算缺少值的分组数据

计算和了解Pandas中哪些列缺少值的替代方法

在Pandas数据框中计算连续数量的Null值

使用pandas在python中计算列总和的方法

如何从 Pandas Dataframe-Python 中计算词频

如何在 Pandas Dataframe 中计算速度

Matplotlib/Seaborn 计算值(Pandas Dataframe)

在 Pandas df 中计算唯一值的循环

迭代完整 Pandas DataFrame 的最佳方法

Pandas DataFrame Groupby:如何计算满足条件的分组行数

在 Pandas Dataframe 中计算行均值排除异常值

Pandas DataFrame 缺少所有值