Python 如何计算数据帧中的nan值?
什么是解释数据帧中nan值(不是数字)的最佳方法 以下代码:Python 如何计算数据帧中的nan值?,python,python-3.x,pandas,dataframe,nan,Python,Python 3.x,Pandas,Dataframe,Nan,什么是解释数据帧中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:
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一起使用。如果您想只计算数据帧
df
的'a'
列中的NaN值,请使用:
len(df) - df['a'].count()
len(df) - df.count()
这里count()
告诉我们非NaN值的数量,这是从值的总数中减去的(由len(df)
给出)
要计算df
每列中的NaN值,请使用:
len(df) - df['a'].count()
len(df) - df.count()
如果要使用
value\u计数
,请通过设置dropna=False告诉它不要删除NaN值(已添加):
这也允许对列中缺少的值进行计数:
3 3
NaN 2
1 1
Name: a, dtype: int64
然后,代码的其余部分应按预期工作(请注意,无需调用sum
;只需print(“nan:%d”%dfv[np.nan])
即可)。要仅计算空值,可以使用:
这里a
是列名,列中有两次出现空值。计算数据帧所有列中所有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计数。第二个和,对这些列和进行求和。如果您只希望每个列的null值的摘要,请使用以下代码
df.isnull().sum()
如果您想知道数据帧中有多少空值,请使用以下代码
df.isnull().sum().sum()#计算总数
计算df中所有非整数的另一种方法:
num\u 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['<column_name>'].value_counts(dropna=False)
这是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)
返回:
- (对695
- 假60,
- 名称:a,数据类型:int64)
- True:表示空值计数
- False:表示非空值计数
使用上述方法后,dfv.values.sum()计算所有值,即6个值没问题!是的,这很有效。实际上,您可以编写dfv.sum()
来计算所有值。或者更有效地,只需检查len(dfd)
。这是解决堆栈溢出的更简单方法。在回答有公认答案的老问题之前(寻找绿色✓) 和其他答案一样,确保你的答案添加了新的内容,或者与之相关的其他方面有所帮助。以下是一个关于这些内容的指南。
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)
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()