【问题标题】:Value error when reading data from Google Sheets with comma as decimal从 Google 表格中读取数据时的值错误,逗号为十进制
【发布时间】:2021-12-26 19:35:12
【问题描述】:

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

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

Google 表格输入为:

自动格式化。

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'

显然,将浮点数的字符串表示形式传递给 int 时会导致此错误,但这对我没有多大帮助。首先转换为浮点数对我没有帮助。

有解决办法吗?我确信我不是第一个使用逗号作为十进制并尝试使用 Python 阅读 Google 表格的人。

【问题讨论】:

    标签: python-3.x google-sheets google-sheets-api


    【解决方案1】:

    在您的情况下,当单元格中的值是数字值时,如何使用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")
    

    参考:

    【讨论】:

      【解决方案2】:

      您需要做的是将所有字符串中的, 更改为.。这可以使用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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 1970-01-01
        相关资源
        最近更新 更多