如何正确地将 pandas 数据框格式化为 google 工作表 api

How to format pandas dataframe into google sheets api properly

我正在尝试通过 google 工作表 API 从 python 到 google 工作表中获取一些数据。数据通过 df 格式化,其中 amounts_a、shoesize_a 和 frequency_a 都是列表

  df_asks = pd.DataFrame(
            {
                "Asks(USD)":amounts_a,
                "Shoes Size(US)":shoesize_a,
                "Frequency":frequency_a 
            }
        )

Present dataframe format, printed

用于更新电子表格的代码:

service = discovery.build('sheets', 'v4', credentials=creds)

spreadsheetId = "xxx"
range_ = sheetname + coordinate 
value_input_option = "USER_ENTERED"
value_range_body = {
    "majorDimension":"COLUMNS",
    "values":
        [data]
    }
request = service.spreadsheets().values().update(spreadsheetId=spreadsheetId, range=range_, 
                                                valueInputOption=value_input_option, body=value_range_body)
print (request)
response = request.execute()

尝试使用当前数据格式更新电子表格值时,我收到以下错误 “TypeError:DataFrame 类型的对象不是 JSON 可序列化的”

我使用 (.to_json()) 将数据帧转换为 json,然后工作,但电子表格中的数据格式是 entire dataframe in one line

如何将此数据框转换为格式正确的工作表(如印刷版所示)?

我刚开始使用数据帧和 api,如有任何帮助,我们将不胜感激

修改点:

  • 在这种情况下,SheetsAPI中spreadsheets.values.update方法的values属性的值需要是二维数组。
  • 根据您的问题,我了解到您可能希望通过将 df_asks 转换为 data 来将 df_asks 的值添加到电子表格中。

在这个回答中,我想提出以下修改。

修改后的脚本:

本次修改data修改如下

从:
value_range_body = {
    "majorDimension":"COLUMNS",
    "values":
        [data]
    }
到:
data = [df_asks.columns.values.tolist()]
data.extend(df_asks.values.tolist())
value_range_body = {"values": data}
  • 当你不想包含 header 行时,我认为你也可以将 data 用作 data = df_asks.values.tolist()

参考文献: