Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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

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 Pandas hasnans为包含NaN值的列返回错误的值_Python_Python 3.x_Pandas_Dataframe_Nan - Fatal编程技术网

Python Pandas hasnans为包含NaN值的列返回错误的值

Python Pandas hasnans为包含NaN值的列返回错误的值,python,python-3.x,pandas,dataframe,nan,Python,Python 3.x,Pandas,Dataframe,Nan,我有一个数据框,大约有200列,7000行。列 b>代码>完全由代码代码>值组成,中间除外400行。 总而言之,B列如下所示(为简洁起见进行了压缩): 但是,当我编写如下代码时,hasnans属性的值似乎不正确。我是否错误地使用了该属性 df['B'].hasnans 返回 False 编辑: 下面是我正在导入熊猫的CSV文件的一个小示例。该列仍然无法找到NaN值。精明的观察者会注意到列标题中B周围的空格。这是意料之中的事,而不是问题所在 " DATE TIME "," A

我有一个数据框,大约有200列,7000行。列<代码> b>代码>完全由代码<楠>代码>值组成,中间除外400行。

总而言之,B列如下所示(为简洁起见进行了压缩):

但是,当我编写如下代码时,
hasnans
属性的值似乎不正确。我是否错误地使用了该属性

df['B'].hasnans
返回
False

编辑: 下面是我正在导入熊猫的CSV文件的一个小示例。该列仍然无法找到NaN值。精明的观察者会注意到列标题中
B
周围的空格。这是意料之中的事,而不是问题所在

"  DATE       TIME  ","  A  ","  C  ","  B  "
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:45:07,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN

在我看来,它显示为false是因为您列中的
“NaN”
值是
“NaN”
而不是
np.NaN
,因此我猜该列的数据类型可能是“object”。因此,您必须将该
“NaN”
值转换为
np.NaN
,以便列的对象可以是int或float,并且hasnans将返回正确的布尔值。

所以首先,

df[df["B"] == "NaN"] = np.nan #it will convert "NaN" values into np.nan
现在,您可以使用
hasnans
isnull()检查NaN值。any()


干杯

在我看来,它显示为false,因为您列中的值是
“NaN”
而不是
np.NaN
,因此我猜该列的数据类型可能是“object”。因此,您必须将该
“NaN”
值转换为
np.NaN
,以便列的对象可以是int或float,并且hasnans将返回正确的布尔值。

所以首先,

df[df["B"] == "NaN"] = np.nan #it will convert "NaN" values into np.nan
现在,您可以使用
hasnans
isnull()检查NaN值。any()

干杯

考虑

"  DATE       TIME  ","  A  ","  C  ","  B  "
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:45:07,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN
作为作为数据帧导入的.csv文件,您必须注意要查找的实际值

事实上:

import pandas as pd
import numpy as np

df = pd.read_csv('filename.csv', header=0)

df['  B  '].replace('      NaN', np.nan, inplace=True)
df['  B  '].hasnans
返回:

True
考虑到

"  DATE       TIME  ","  A  ","  C  ","  B  "
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:44:36,     5448,     0.00,      NaN
12/11/2018 15:45:07,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:08,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN
12/11/2018 15:45:09,     5448,     0.00,      NaN
作为作为数据帧导入的.csv文件,您必须注意要查找的实际值

事实上:

import pandas as pd
import numpy as np

df = pd.read_csv('filename.csv', header=0)

df['  B  '].replace('      NaN', np.nan, inplace=True)
df['  B  '].hasnans
返回:

True

在中读取csv时,应使用
skipinitialspace
选项删除数据中的前导空格。请注意,由于列名在引号中,因此这些列名周围的空白将保留

#伪造csv
从io导入StringIO
mock_csv=StringIO()
模拟csv.write(“”)\
“日期时间”、“A”、“C”、“B”
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:45:075448,0.00,南
2018年11月12日15:45:085448,0.00,南
2018年11月12日15:45:085448,0.00,南
2018年11月12日15:45:095448,0.00,南
2018年11月12日15:45:095448,0.00,南
""")
模拟csv.seek(0)
#忽略初始空白
df=pd.read\u csv(mock\u csv,skipinitialspace=True)
断言df['B'].hasnans

查看文档

在中读取csv时,应使用
skipinitialspace
选项删除数据中的前导空格。请注意,由于列名在引号中,因此这些列名周围的空白将保留

#伪造csv
从io导入StringIO
mock_csv=StringIO()
模拟csv.write(“”)\
“日期时间”、“A”、“C”、“B”
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:44:365448,0.00,南
2018年11月12日15:45:075448,0.00,南
2018年11月12日15:45:085448,0.00,南
2018年11月12日15:45:085448,0.00,南
2018年11月12日15:45:095448,0.00,南
2018年11月12日15:45:095448,0.00,南
""")
模拟csv.seek(0)
#忽略初始空白
df=pd.read\u csv(mock\u csv,skipinitialspace=True)
断言df['B'].hasnans

查看文档

我复制并粘贴了您的确切df和代码,并返回True。在您的实例中,它们可能是NaN的字符串。将数据类型更改为int并重试。我想您的意思是将数据类型更改为
float
是的,我已将数据类型更改为
float
并重试,谢谢。我复制并粘贴了您的确切df和代码,并返回True。在您的实例中,它们可能是NaN的字符串。将数据类型更改为int并重试。我想您的意思是将数据类型更改为
float
是的,我做了,将数据类型更改为
float
并重试,谢谢您您的答案给出了最简洁的修复,因此您得到了选中标记。您的答案给出了最简洁的修复,因此您得到了选中标记。您的解决方案运行良好,除非有不同数量的空格。我将它推广到一个正则表达式
\sNaN
,并设置了正则表达式标志,它按预期工作。您的解决方案工作得很好,除了在具有不同空格数的情况下。我将它概括为一个正则表达式
\sNaN
,并设置了正则表达式标志,它按预期工作。