我有一个数据帧,其中我有非常不同类型的条目(文本、整数、浮点数、时间等),我正在try 删除文本条目中的前导和尾随空格,以便我的其他代码可以按预期工作.然而,我的代码似乎不起作用.

下面是我想要做的一个简单的例子:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.array(([np.nan, 2, 3], [4, 5, 6])), columns=["one", "two", "three"])
print(df1)
print("")
df2 = df1.map(lambda x: x.strip() if isinstance(x, str) else x)
print(df2)
print("")
print(df1==df2)
print("")
cell1 = df1.at[0, "one"]
cell2 = df2.at[0, "one"]
print(cell1, type(cell1))
print(cell2, type(cell2))
print(cell1==cell2)

当我运行此代码时,输出为:

   one  two  three
0  NaN  2.0    3.0
1  4.0  5.0    6.0

   one  two  three
0  NaN  2.0    3.0
1  4.0  5.0    6.0

     one   two  three
0  False  True   True
1   True  True   True

nan <class 'numpy.float64'>
nan <class 'numpy.float64'>
False

正如您所看到的,df1df2具有完全相同的整体(NaN),但是代码块print(cell1==cell2)声称这些单元是不同的.

这是怎么回事?

推荐答案

这就是浮点数的工作原理,你不能直接比较NaN(Why is NaN not equal to NaN?)

使用Dataframe.equals比较数据帧:

df1 = pd.DataFrame(
    np.array(([np.nan, 2, 3], [4, 5, 6])), columns=["one", "two", "three"]
)

df2 = df1.map(lambda x: x.strip() if isinstance(x, str) else x)

print(df1.equals(df2))

打印:

True

Python-3.x相关问答推荐

使用魔方无法从图像中识别单个字符

错误2没有这样的文件或目录website_content.txt""

一种基于绝对排序值的极框索引和列定位的Python方法

如何将项目添加到Python中具有固定大小的列表列表中

安装没有 sudo 权限的 python3 和 pip3

如何将列表和字典逐行组合在一起

为什么 mypy 不适用于 sqlalchemy?

使用 selenium 加速网页抓取

使用正则表达式提取字符串之间的文本

正则表达式从文本文件中捕获包含制表符/空格和子字符串的部分字符串

Python3 AttributeError:列表对象没有属性清除

如何从左到右解包元组?

Python - For 循环数百万行

如何模拟 Django 模型对象(及其方法)?

IronPython 3 支持?

如何在 Selenium 和 Python 中使用类型查找元素

使用 python2 和 python3 创建一个 virtualenv

plt.cm.get_cmap 中可以使用哪些名称?

TypeError:多个基地有实例布局冲突

使用 Python 3 读取 CSV 文件