Python json规范化API请求
我接收JSON格式的数据,很难将它们转换成合适的格式。希望你能帮助我Python json规范化API请求,python,json,pandas,normalize,Python,Json,Pandas,Normalize,我接收JSON格式的数据,很难将它们转换成合适的格式。希望你能帮助我 import pandas as pd from pandas.io.json import json_normalize import requests dataAPI = requests.get('here is the API URL') print(dataAPI.json()) 给我以下输出: {'c': [277.775, 277.76, 277.65, 277.64, 277.5215], 'h':
import pandas as pd
from pandas.io.json import json_normalize
import requests
dataAPI = requests.get('here is the API URL')
print(dataAPI.json())
给我以下输出:
{'c': [277.775, 277.76, 277.65, 277.64, 277.5215], 'h': [277.89, 278.06, 277.98, 277.
76, 277.98], 'l': [277.67, 277.71, 277.59, 277.42, 277.472], 'o': [277.69, 277.795, 277.77, 277.66, 277.72], 's': 'ok', 't': [1587412320, 1587412380, 1587412440, 1587412500, 1587412560, 1587412620, ], 'v': [0, 142752, 133100, 259539, 0]}
我想创建一个包含以下列(跳过列s)和浮点单元格值的数据框:
c| h| l| o| t| v
277.775| 277.89| 277.67| 277.69| 1587412320| 0
...
我尝试了一些类似json_规范化(dataAPI,'c')的东西
但这给了我一个错误信息
TypeError:字节索引必须是整数或片,而不是str
非常感谢您的帮助您必须定义所需的列,而不仅仅是使用熊猫。concat:
j = {'c': [277.775, 277.76, 277.65, 277.64, 277.5215], 'h': [277.89, 278.06, 277.98, 277.76, 277.98], 'l': [277.67, 277.71, 277.59, 277.42, 277.472], 'o': [277.69, 277.795, 277.77, 277.66, 277.72], 's': 'ok', 't': [1587412320, 1587412380, 1587412440, 1587412500, 1587412560, 1587412620, ], 'v': [0, 142752, 133100, 259539, 0]}
columns = {'c', 'h', 'l', 'o', 't', 'v'}
pd.concat([pd.DataFrame({k: v}) for k, v in j.items() if k in columns], axis=1)
输出:
对于从API响应获得的上述输出,您可以执行以下操作:
import pandas as pd
df1 = pd.DataFrame.from_dict(dict1, orient="index").T.drop(columns=["s"])
df1
上面的代码将通过按索引定向(如果字典中的列表值相等,也可以按列定向)从字典创建数据帧,然后对其进行转置。drop将指示您要删除的列
输出:
Out[21]:
c h l o t v
0 277.775 277.89 277.67 277.69 1587412320 0
1 277.76 278.06 277.71 277.795 1587412380 142752
2 277.65 277.98 277.59 277.77 1.58741e+09 133100
3 277.64 277.76 277.42 277.66 1.58741e+09 259539
4 277.522 277.98 277.472 277.72 1.58741e+09 0
5 NaN NaN NaN NaN 1.58741e+09 NaN
您希望不包含NaN
,因此您也可以将dropna()
附加到代码中,如下所示:
df1 = pd.DataFrame.from_dict(dict1, orient="index").T.drop(columns=["s"]).dropna()
通过这种方式,您可以灵活地处理
NaN
并删除不需要的列。有时会出现以下错误:回溯(最近一次调用):文件“test.py”,第19行,dfraw=pd.concat([pd.DataFrame({k:v})表示k,v表示dataAPI.json().items()表示k,axis=1)文件“C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local Packages\Python38\site Packages\requests\models.py”,json中的第898行…从None json.decoder.jsondecodecoder.jsondecorderror:预期值:第1行第1列(char 0)是否有方法跳过此错误我正在循环中运行API请求…我假设服务器输出数据文件为空(这就是出现错误的原因)。是否有方法告诉Python->如果遇到错误,请继续循环
df1 = pd.DataFrame.from_dict(dict1, orient="index").T.drop(columns=["s"]).dropna()