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
意思是 df
和 df2
不一样 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"))
.
我需要这方面的帮助,因为我已经搜索了将近 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
意思是 df
和 df2
不一样 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"))
.