从 Google 工作表读取数据时出现值错误,逗号为十进制

Value error when reading data from Google Sheets with comma as decimal

当使用 Python 和 Google Sheet 读取 Google Sheet 和 Google API 时,我很难从数值中获取数值。

我住的地方我们使用逗号作为小数点分隔符,这似乎是问题所在。

Google sheet 输入是:

自动格式。

Python 脚本是:

gc = gspread.service_account(filename="gdocs_access.json")
sh = gc.open("my_file").worksheet("sheet 1")
data = sh.get_all_records(numericise_ignore=["all"])
print(data)

[{'id': 'b', 'value': '200,3'}, {'id': 'c', 'value': '40'}, {'id': 'a', 'value': '-30,5'}]

将所有数值作为字符串返回。

如果我把它放在 df 中并将字符串值转换为 int:

data = pd.DataFrame(data)
data['value'].astype(int)

我收到这个错误:

ValueError: invalid literal for int() with base 10: '200,3'

显然这个错误是在将 float 的字符串表示形式传递给 int 时引起的,但这对我没有太大帮助。首先转换为浮点数对我没有帮助。

有解决办法吗?我确定我不是第一个使用逗号作为十进制并尝试用 Python.

读取 Google sheets 的人

您需要做的是将所有字符串中的 , 更改为 .。这可以使用 str.replace 方法来完成。

您可以使用列表理解创建一个新列表 data 并将其转换为 DataFrame:

data = [{'id': e['id'], 'value': int(float(e['value'].replace(',', '.')))} for e in data]
data = pd.DataFrame(data)

或者您可以直接转换为 DataFrame 并更改列。

data = pd.DataFrame(data)
data['value'] = data['value'].str.replace(',', '.').astype(float).astype(int)

在您的情况下,当单元格中的值为数值时,使用 value_render_option 怎么样?

发件人:

data = sh.get_all_records(numericise_ignore=["all"])

收件人:

data = sh.get_all_records(numericise_ignore=["all"], value_render_option="UNFORMATTED_VALUE")

data = sh.get_all_records(value_render_option="UNFORMATTED_VALUE")

参考: