首页 > 解决方案 > 将json响应(来自google sheet API的'spreadsheet.value.get')转换为具有正确列标题的pandas数据框

问题描述

我从google sheet API 中的方法得到以下.json响应spreadsheets.values.get

{'majorDimension': 'ROWS',
 'range': 'Sheet1!A1:D5',
 'values': [['Item', 'Cost', 'Stocked', 'Ship Date'],
            ['Wheel', '$20.50', '4', '3/1/2016'],
            ['Door', '$15', '2', '3/15/2016'],
            ['Engine', '$100', '1', '3/20/2016'],
            ['Totals', '$135.50', '7', '3/20/2016']]}

在上面的 json 响应中,明显的列标题是,['Item','Cost','Stocked','Ship Date'].json响应似乎将这些列标题包含在“值”标签下的实际数据记录中。

我的意图是将此 .json 响应读入 pandas df ,其中列名来自 "values" 的第一行['Item','Cost','Stocked','Ship Date']。我知道您可以使用 pandasjson_normalize方法来展平“值”记录,但我还无法分离列标题 - 谁能帮我将“值”的第一行过滤到列标题中?

建议我执行以下操作:

response = {'majorDimension': 'ROWS',
 'range': 'Sheet1!A1:D5',
 'values': [['Item', 'Cost', 'Stocked', 'Ship Date'],
            ['Wheel', '$20.50', '4', '3/1/2016'],
            ['Door', '$15', '2', '3/15/2016'],
            ['Engine', '$100', '1', '3/20/2016'],
            ['Totals', '$135.50', '7', '3/20/2016']]}

sheet_values = response.get('values', [])

df = pd.DataFrame(sheet_values['values'],columns=sheet_values['values'][0]).drop(0)

上面的代码给我以下错误..

TypeError: list indices must be integers or slices, not str

标签: python-3.xpandasgoogle-sheets-api

解决方案


假设您的 .json 被调用response,运行:

import pandas as pd
pd.DataFrame(response['values'],columns=response['values'][0]).drop(0)

你不需要sheet_values代码。


推荐阅读