从 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")
参考:
当使用 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")