【问题标题】:Convert json response (from google sheets API's 'spreadsheet.value.get ') into a pandas dataframe with correct column headers将json响应(来自google sheet API的'spreadsheet.value.get')转换为具有正确列标题的pandas数据框
【发布时间】:2019-07-29 23:09:17
【问题描述】:

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

{'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,其中列名来自“值”['Item','Cost','Stocked','Ship Date'] 的第一行。我知道您可以使用 pandas json_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.x pandas google-sheets-api


    【解决方案1】:

    假设你的 .json 被称为 response,运行:

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

    您不需要sheet_values 代码。

    【讨论】:

    • 我喜欢你的想法,但这样做会给我以下错误...TypeError: list indices must be integers or slices, not str
    • 你能分享你的代码吗?它在这里工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2021-07-13
    • 2022-11-13
    • 2017-12-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多