使用 Python 和 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'
顯然,這個錯誤是在將浮點數的字串表示形式傳遞給 int 時引起的,但這對我沒有多大幫助。首先轉換為浮動對我沒有幫助。
有解決方案嗎?我確信我不是第一個使用逗號作為十進制并嘗試使用 Python 閱讀 Google 表格的人。
uj5u.com熱心網友回復:
在你的情況下,當單元格中的值是數值時,如何使用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")
參考:
- 獲取所有記錄
uj5u.com熱心網友回復:
您需要做的是在所有字串中更改,為.。這可以使用str.replace-method來完成。
您可以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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/396716.html
