相等的Python数据帧不是相等的

2024-10-01 07:44:27 发布

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

我正在学习一门在线Python课程,这门课程是关于数据帧的。你知道吗

我下载了this CSV file并将其导入数据帧:

import os
import pandas as pd
os.chdir('C:/cygwin64/home/User.Name/path/to/brics.csv')
pd.read_csv( os.getcwd() + '/brics.csv' )
myBrics = pd.read_csv( 'brics.csv' )
myBrics

      Unnamed: 0       country    capital    area  population
    0         BR        Brazil   Brasilia   8.516      200.40
    1         RU        Russia     Moscow  17.100      143.50
    2         IN         India  New Delhi   3.286     1252.00
    3         CH         China    Beijing   9.597     1357.00
    4         SA  South Africa   Pretoria   1.221       52.98

然后,我使用课程演示中给出的代码创建相同的数据帧

dict = {
   "country":["Brazil", "Russia", "India", "China", "South Africa"],
   "capital":["Brasilia", "Moscow", "New Delhi", "Beijing", "Pretoria"],
   "area":[8.516, 17.10, 3.286, 9.597, 1.221],
   "population":[200.4, 143.5, 1252, 1357, 52.98] }
brics = pd.DataFrame(dict)
brics

            country    capital    area  population
    0        Brazil   Brasilia   8.516      200.40
    1        Russia     Moscow  17.100      143.50
    2         India  New Delhi   3.286     1252.00
    3         China    Beijing   9.597     1357.00
    4  South Africa   Pretoria   1.221       52.98

除了myBrics中的第一列之外,它们似乎是相同的。一些网络搜索显示我可以摆脱第1栏:

myBrics.drop( myBrics.columns[[0]] , axis=1 )

            country    capital    area  population
    0        Brazil   Brasilia   8.516      200.40
    1        Russia     Moscow  17.100      143.50
    2         India  New Delhi   3.286     1252.00
    3         China    Beijing   9.597     1357.00
    4  South Africa   Pretoria   1.221       52.98

但是,外观相同的数据帧仍然不相等:

myBrics.drop( myBrics.columns[[0]] , axis=1 ).equals( brics )

    False

有人能解释一下发生了什么事吗?谢谢。你知道吗

我使用的是Spyder的Python3.7,通过Anaconda安装(由具有管理员权限的人安装)。操作系统是64位的Windows7。你知道吗


Tags: csv数据newareacountrypdpopulationbrazil
3条回答

我怀疑是你专栏的数据类型。正如文件提到的:

The column headers do not need to have the same type, but the elements within the columns must be the same dtype.

您可以使用:

dataframe.dtypes

查看每列的数据类型

您依赖于浮点值返回true的相等性;有很多资源可以解释为什么它不能按预期工作。你知道吗

我建议导入numpy并对浮点数列使用isclose函数

将此添加到导入中

import numpy as np

然后使用以下命令:

eq = np.isclose(myBrics['area'], brics['area'])

如果您想更深入地了解浮动的细节,请参见this answer

艾伦·埃尔德的回答是正确的。我运行了以下代码:

import os
import pandas as pd
myBrics = pd.read_csv( 'brics.csv' )
dict = {
     "country":["Brazil", "Russia", "India", "China", "South Africa"],
     "capital":["Brasilia", "Moscow", "New Delhi", "Beijing", "Pretoria"],
     "area":[8.516, 17.10, 3.286, 9.597, 1.221],
     "population":[200.4, 143.5, 1252, 1357, 52.98] }
brics = pd.DataFrame(dict)
myBrics = myBrics.drop( myBrics.columns[[0]] , axis=1 )
print (myBrics['area'].equals(brics['area']))

结果是

False

相关问题 更多 >