首页 > 解决方案 > 如何将 pandas 数据框正确格式化为 google sheet api

问题描述

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

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

当前数据帧格式,打印

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

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,然后它可以工作,但电子表格中的数据格式是一行中的整个数据帧

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

我是使用数据框和 api 的新手,任何帮助将不胜感激

标签: pythonjsondataframegoogle-sheetsgoogle-sheets-api

解决方案


修改点:

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

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

修改后的脚本:

在本次修改中,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}
  • 当您不想包含标题行时,我认为您也可以使用dataas data = df_asks.values.tolist()

参考:


推荐阅读