Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算数据帧中的nan值?_Python_Python 3.x_Pandas_Dataframe_Nan - Fatal编程技术网

Python 如何计算数据帧中的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:

什么是解释数据帧中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一起使用。

如果您想只计算数据帧
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()