python-3.x 在pandas中将strip()Map到字符串并没有改变NaN条目,但仍然声称它们是不同的?

c0vxltue  于 2024-01-10  发布在  Python
关注(0)|答案(1)|浏览(560)

我有一个嵌套框架,其中有非常不同的条目(文本,整数,浮点数,时间等),我试图删除文本条目中的前导和尾随空格,以便我的其他代码可以按预期工作。然而,我的代码似乎不工作。
这里有一个简单的例子,我正在尝试做什么:

  1. import pandas as pd
  2. import numpy as np
  3. df1 = pd.DataFrame(np.array(([np.nan, 2, 3], [4, 5, 6])), columns=["one", "two", "three"])
  4. print(df1)
  5. print("")
  6. df2 = df1.map(lambda x: x.strip() if isinstance(x, str) else x)
  7. print(df2)
  8. print("")
  9. print(df1==df2)
  10. print("")
  11. cell1 = df1.at[0, "one"]
  12. cell2 = df2.at[0, "one"]
  13. print(cell1, type(cell1))
  14. print(cell2, type(cell2))
  15. print(cell1==cell2)

字符串
当我运行这段代码时,输出是:

  1. one two three
  2. 0 NaN 2.0 3.0
  3. 1 4.0 5.0 6.0
  4. one two three
  5. 0 NaN 2.0 3.0
  6. 1 4.0 5.0 6.0
  7. one two three
  8. 0 False True True
  9. 1 True True True
  10. nan <class 'numpy.float64'>
  11. nan <class 'numpy.float64'>
  12. False


正如你所看到的,df1df2具有完全相同的整数(NaN),但是代码块print(cell1==cell2)声称这些单元格是不同的。
这是怎么回事?

odopli94

odopli941#

这就是浮点数的工作原理,你不能直接比较NaN s(Why is NaN not equal to NaN?
使用Dataframe.equals比较两个字符串:

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

字符串
印刷品:

  1. True

展开查看全部

相关问题