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

2024-06-11 08:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约有200列,7000行的数据帧。列{< CD1> }完全由^ {< CD2> }值组成,中间除外400行。在

总而言之,B列如下(为简洁起见,缩略):

      B
 1  NaN
 2  NaN
 3   75
 4   83
 5  NaN
 6  NaN

但是,当我按如下方式编写代码时,hasnans属性似乎有错误的值。我是不是用错了这个属性?在

^{pr2}$

退货 False

编辑: 下面是一个CSV文件的小样本,我正在导入到pandas中。列仍然找不到NaN值。敏锐的观察者会注意到列标题中B周围的空格。这是意料之中的,而不是问题所在。在

^{3}$

Tags: 文件csv数据代码false编辑属性错误
3条回答

考虑

"  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

作为作为pandas dataframe导入的.csv文件,必须注意要查找的实际值。在

事实上:

^{pr2}$

退货:

True

当您读入csv时,应该使用skipinitialspace选项删除数据中的前导空格。请注意,由于列名是用引号括起来的,因此它们周围的空格将保留

# make fake csv
from io import StringIO

mock_csv = StringIO()
mock_csv.write("""\
"  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
""")
mock_csv.seek(0)

# disregard initial whitespace
df = pd.read_csv(mock_csv, skipinitialspace=True)
assert df['  B  '].hasnans

参见文档here

{cd1>中显示的值{cd1>不能是中的值。因此,您必须将"NaN"值转换为np.nan,这样列的对象可以是int或float,hasnans将返回正确的布尔值。

所以首先

df[df["B"] == "NaN"] = np.nan #it will convert "NaN" values into np.nan

现在您可以使用hasnans或{}来检查NaN值

干杯!在

相关问题 更多 >