如何计算 pandas DataFrame 中的 nan 值?
How to count nan values in a pandas DataFrame?
在 pandas DataFrame 中解释(不是数字)nan 值的最佳方法是什么?
以下代码:
import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())
输出:
nan: 0
1: 1
3: 3
total: 4
虽然所需的输出是:
nan: 2
1: 1
3: 3
total: 6
我正在使用 pandas 0.17 和 Python 3.5.0 以及 Anaconda 2.4.0。
如果您只想计算 DataFrame df
的第 'a'
列中的 NaN 值,请使用:
len(df) - df['a'].count()
这里 count()
告诉我们 non-NaN 个值的数量,这是从值的总数(由 len(df)
给出)中减去的。
要计算 df
的 每个 列中的 NaN 值,请使用:
len(df) - df.count()
如果你想使用 value_counts
,通过设置 dropna=False
告诉它 不要 删除 NaN 值(在 0.14.1 中添加):
dfv = dfd['a'].value_counts(dropna=False)
这样也可以计算列中的缺失值:
3 3
NaN 2
1 1
Name: a, dtype: int64
您的其余代码应该会按预期工作(请注意,没有必要调用 sum
;只需 print("nan: %d" % dfv[np.nan])
就足够了)。
要仅计算空值,您可以使用 isnull()
:
In [11]:
dfd.isnull().sum()
Out[11]:
a 2
dtype: int64
此处a
为列名,列中出现2次空值
计算数据框所有列中的所有 NaN 的一种干净利落的方法是...
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
print(df.isna().sum().sum())
使用单个总和,您可以计算每列的 NaN 数。第二个总和,对这些列总和求和。
如果你只想要每一列空值的汇总,使用下面的代码
df.isnull().sum()
如果您想使用以下代码知道数据框中有多少空值
df.isnull().sum().sum() # calculate total
另一种计算 df 中的 all nans 的方法:
num_nans = df.size - df.count().sum()
时间安排:
import timeit
import numpy as np
import pandas as pd
df_scale = 100000
df = pd.DataFrame(
[[1, np.nan, 100, 63], [2, np.nan, 101, 63], [2, 12, 102, 63],
[2, 14, 102, 63], [2, 14, 102, 64], [1, np.nan, 200, 63]] * df_scale,
columns=['group', 'value', 'value2', 'dummy'])
repeat = 3
numbers = 100
setup = """import pandas as pd
from __main__ import df
"""
def timer(statement, _setup=None):
print (min(
timeit.Timer(statement, setup=_setup or setup).repeat(
repeat, numbers)))
timer('df.size - df.count().sum()')
timer('df.isna().sum().sum()')
timer('df.isnull().sum().sum()')
打印:
3.998805362999999
3.7503365439999996
3.689461442999999
非常相似
这个最适合我!
如果你想得到一个简单的汇总使用(非常适合数据科学计算缺失值及其类型):
df.info(verbose=True, null_counts=True)
或者另一个很酷的是:
df['<column_name>'].value_counts(dropna=False)
示例:
df = pd.DataFrame({'a': [1, 2, 1, 2, np.nan],
...: 'b': [2, 2, np.nan, 1, np.nan],
...: 'c': [np.nan, 3, np.nan, 3, np.nan]})
这是 df:
a b c
0 1.0 2.0 NaN
1 2.0 2.0 3.0
2 1.0 NaN NaN
3 2.0 1.0 3.0
4 NaN NaN NaN
运行 信息:
df.info(verbose=True, null_counts=True)
...:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
a 4 non-null float64
b 3 non-null float64
c 2 non-null float64
dtypes: float64(3)
所以你看到 C 你得到,在 5 行中 2 non-nulls,b/c 你有空行:[0,2,4]
这就是你对每一列使用 value_counts 得到的结果:
In [17]: df['a'].value_counts(dropna=False)
Out[17]:
2.0 2
1.0 2
NaN 1
Name: a, dtype: int64
In [18]: df['b'].value_counts(dropna=False)
Out[18]:
NaN 2
2.0 2
1.0 1
Name: b, dtype: int64
In [19]: df['c'].value_counts(dropna=False)
Out[19]:
NaN 3
3.0 2
Name: c, dtype: int64
dfd['a'].isnull().value_counts()
return :
- (True 695
- False 60,
- Name: a, dtype: int64)
- True : represents the null values count
- False : represent the non-null values count
在 pandas DataFrame 中解释(不是数字)nan 值的最佳方法是什么?
以下代码:
import numpy as np
import pandas as pd
dfd = pd.DataFrame([1, np.nan, 3, 3, 3, np.nan], columns=['a'])
dfv = dfd.a.value_counts().sort_index()
print("nan: %d" % dfv[np.nan].sum())
print("1: %d" % dfv[1].sum())
print("3: %d" % dfv[3].sum())
print("total: %d" % dfv[:].sum())
输出:
nan: 0
1: 1
3: 3
total: 4
虽然所需的输出是:
nan: 2
1: 1
3: 3
total: 6
我正在使用 pandas 0.17 和 Python 3.5.0 以及 Anaconda 2.4.0。
如果您只想计算 DataFrame df
的第 'a'
列中的 NaN 值,请使用:
len(df) - df['a'].count()
这里 count()
告诉我们 non-NaN 个值的数量,这是从值的总数(由 len(df)
给出)中减去的。
要计算 df
的 每个 列中的 NaN 值,请使用:
len(df) - df.count()
如果你想使用 value_counts
,通过设置 dropna=False
告诉它 不要 删除 NaN 值(在 0.14.1 中添加):
dfv = dfd['a'].value_counts(dropna=False)
这样也可以计算列中的缺失值:
3 3
NaN 2
1 1
Name: a, dtype: int64
您的其余代码应该会按预期工作(请注意,没有必要调用 sum
;只需 print("nan: %d" % dfv[np.nan])
就足够了)。
要仅计算空值,您可以使用 isnull()
:
In [11]:
dfd.isnull().sum()
Out[11]:
a 2
dtype: int64
此处a
为列名,列中出现2次空值
计算数据框所有列中的所有 NaN 的一种干净利落的方法是...
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2,np.nan], 'b':[np.nan,1,np.nan]})
print(df.isna().sum().sum())
使用单个总和,您可以计算每列的 NaN 数。第二个总和,对这些列总和求和。
如果你只想要每一列空值的汇总,使用下面的代码
df.isnull().sum()
如果您想使用以下代码知道数据框中有多少空值
df.isnull().sum().sum() # calculate total
另一种计算 df 中的 all nans 的方法:
num_nans = df.size - df.count().sum()
时间安排:
import timeit
import numpy as np
import pandas as pd
df_scale = 100000
df = pd.DataFrame(
[[1, np.nan, 100, 63], [2, np.nan, 101, 63], [2, 12, 102, 63],
[2, 14, 102, 63], [2, 14, 102, 64], [1, np.nan, 200, 63]] * df_scale,
columns=['group', 'value', 'value2', 'dummy'])
repeat = 3
numbers = 100
setup = """import pandas as pd
from __main__ import df
"""
def timer(statement, _setup=None):
print (min(
timeit.Timer(statement, setup=_setup or setup).repeat(
repeat, numbers)))
timer('df.size - df.count().sum()')
timer('df.isna().sum().sum()')
timer('df.isnull().sum().sum()')
打印:
3.998805362999999
3.7503365439999996
3.689461442999999
非常相似
这个最适合我!
如果你想得到一个简单的汇总使用(非常适合数据科学计算缺失值及其类型):
df.info(verbose=True, null_counts=True)
或者另一个很酷的是:
df['<column_name>'].value_counts(dropna=False)
示例:
df = pd.DataFrame({'a': [1, 2, 1, 2, np.nan],
...: 'b': [2, 2, np.nan, 1, np.nan],
...: 'c': [np.nan, 3, np.nan, 3, np.nan]})
这是 df:
a b c
0 1.0 2.0 NaN
1 2.0 2.0 3.0
2 1.0 NaN NaN
3 2.0 1.0 3.0
4 NaN NaN NaN
运行 信息:
df.info(verbose=True, null_counts=True)
...:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
a 4 non-null float64
b 3 non-null float64
c 2 non-null float64
dtypes: float64(3)
所以你看到 C 你得到,在 5 行中 2 non-nulls,b/c 你有空行:[0,2,4]
这就是你对每一列使用 value_counts 得到的结果:
In [17]: df['a'].value_counts(dropna=False)
Out[17]:
2.0 2
1.0 2
NaN 1
Name: a, dtype: int64
In [18]: df['b'].value_counts(dropna=False)
Out[18]:
NaN 2
2.0 2
1.0 1
Name: b, dtype: int64
In [19]: df['c'].value_counts(dropna=False)
Out[19]:
NaN 3
3.0 2
Name: c, dtype: int64
dfd['a'].isnull().value_counts()
return :
- (True 695
- False 60,
- Name: a, dtype: int64)
- True : represents the null values count
- False : represent the non-null values count