Sheet DataFrame 与相同构造的 DataFrame 不相等

Sheet DataFrame turns to not equal with same constructed dataframe

我需要这方面的帮助,因为我已经搜索了将近 3 个小时的解决方案,但没有找到任何东西。

我这里有一个从脚本创建的简单 pandas 数据框,这个数据框使用 Google Sheet API.[= 上传到 google sheet 37=]

源代码:

import gspread, pandas as pd

cols = [
"Filename",
"Version Number",
"House Name",
]

df = pd.DataFrame(columns=cols)

for i in range(0,5):
    out = {
    "Filename":i,
    "Version Number":i+1,
    "House Name":i+2
    }
    df = df.append(out,ignore_index=True)





creds_path = "creds.json"
service_account = gspread.service_account(filename=creds_path)
spreadsheet = service_account.open_by_key("1a8NxVF6yUE0jSa63tjhEDHAS2q7dsdo0lT4saMGKROI")
worksheet = spreadsheet.sheet1


df2 = pd.DataFrame(worksheet.get_all_records())
print(df.equals(df2))

#worksheet.clear()
#worksheet.update([df.columns.values.tolist()] + df.values.tolist())

这是一个非常简单的脚本,它创建一个 pandas 数据框,然后以编程方式将其上传到 google sheet 。我制作此 sheet 用于 测试目的 我可以公开将其提供给任何人,而且如果您想尝试一下,您将需要 .json 文件包含凭据,我也为任何想尝试的人制作了一个,但请注意,这 仅用于测试目的 .

Note: I will be deactivating credentials once the question is answered.

链接:

下面是我遇到的问题。创建 pandas 数据框后,使用这部分代码上传它。 worksheet.clear() & worksheet.update([df.columns.values.tolist()] + df.values.tolist())。您可以在 sheet 上清楚地看到它有效并且 sheet 看起来像这样。

现在,当我尝试 READ sheet 并将其转换为 pandas 数据帧时。

df2 = pd.DataFrame(worksheet.get_all_records())

我也想 看看 sheet 上的数据是否与在脚本。现在当我 运行 这个 print(df.equals(df2)) 它 returns False 意思是 dfdf2 不一样 dataframe 这是我可以清楚地看到不是我所期望的。很明显,我上传了相同的数据框,但为什么在比较两者时显示 False?实际上它应该在哪里 True 对吗?

如果你试着打印出来 df & df2 你可以清楚地看到它们是一样的吧?我建议你尝试自己从脚本中打印出来。

df:

  Filename Version Number House Name
0        0              1          2
1        1              2          3
2        2              3          4
3        3              4          5
4        4              5          6

df2:

   Filename  Version Number  House Name
0         0               1           2
1         1               2           3
2         2               3           4
3         3               4           5
4         4               5           6

主要Objective:

My objective is just to see if the data from the sheet is exactly the same as the created dataframe in the script. I just wanted to like to check if they are the same cause I would be doing other stuffs depending on that condition.

有人可以就我在这里缺少的任何内容教育我。非常感谢您的帮助!

gspread API return 编辑了类型为 int64 的数据帧 df2,而您手动创建的数据帧 df 的类型为 int.由于类型不同,两个数据帧不相等。

如果您尝试 df.astype('int64').equals(df2),它将 return True

或者您可以使用 all(df.eq(df2)),这也将 return True。这将比较数据帧的每个元素,并使用 all.

组合布尔标志

第三种方法(OP 在下面的评论中建议)是 df.astype("str").equals(df2.astype("str")).