python-3.x - 将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
解决方案
假设您的 .json 被调用response
,运行:
import pandas as pd
pd.DataFrame(response['values'],columns=response['values'][0]).drop(0)
你不需要sheet_values
代码。
推荐阅读
- bash - 需要将 500 个特定文件从一个共享目录移动到另一个共享目录
- continuous-integration - 如何自动将库从一个项目升级到另一个项目
- java - 用 Java 连接本地网络之外的计算机
- json - 在 React Native 中创建动态图库,但图像不会出现
- javascript - 如何在 google-apps-script Web 应用程序的 for-loop 函数中使用 async/await 和 FileReader?
- javascript - javascript async await 使用 Promise 提交带有 onsubmit 的表单
- symfony - 在 Symfony 4 中填充所有必需参数
- google-app-engine - 允许用户直接发布到 Google Cloud Storage?
- c# - 在 asp.net 核心中使用 NVarChar
- python - 自动检测二维数组/热图中的集群