Python - 到 Pandas 数据框的 Json 列表
Posted
技术标签:
【中文标题】Python - 到 Pandas 数据框的 Json 列表【英文标题】:Python - Json List to Pandas Dataframe 【发布时间】:2018-07-19 03:54:39 【问题描述】:我有 json 列表,但我无法转换为 Pandas 数据框(各种行和 19 列)
回复链接:https://www.byma.com.ar/wp-admin/admin-ajax.php?action=get_historico_simbolo&simbolo=INAG&fecha=01-02-2018
json 响应:
["Apertura":35,"Apertura_Homogeneo":35,"Cantidad_Operaciones":1,"Cierre":35,"Cierre_Homogeneo":35,"Denominacion":"INSUMOS AGROQUIMICOS S.A.","Fecha":"02\/02\/2018","Maximo":35,"Maximo_Homogeneo":35,"Minimo":35,"Minimo_Homogeneo":35,"Monto_Operado_Pesos":175,"Promedio":35,"Promedio_Homogeneo":35,"Simbolo":"INAG","Variacion":-5.15,"Variacion_Homogeneo":0,"Vencimiento":"48hs","Volumen_Nominal":5,
"Apertura":34.95,"Apertura_Homogeneo":34.95,"Cantidad_Operaciones":2,"Cierre":34.95,"Cierre_Homogeneo":34.95,"Denominacion":"INSUMOS AGROQUIMICOS S.A.","Fecha":"05\/02\/2018","Maximo":34.95,"Maximo_Homogeneo":34.95,"Minimo":34.95,"Minimo_Homogeneo":34.95,"Monto_Operado_Pesos":5243,"Promedio":-79228162514264337593543950335,"Promedio_Homogeneo":-79228162514264337593543950335,"Simbolo":"INAG","Variacion":-0.14,"Variacion_Homogeneo":-0.14,"Vencimiento":"48hs","Volumen_Nominal":150,
"Apertura":32.10,"Apertura_Homogeneo":32.10,"Cantidad_Operaciones":2,"Cierre":32.10,"Cierre_Homogeneo":32.10,"Denominacion":"INSUMOS AGROQUIMICOS S.A.","Fecha":"07\/02\/2018","Maximo":32.10,"Maximo_Homogeneo":32.10,"Minimo":32.10,"Minimo_Homogeneo":32.10,"Monto_Operado_Pesos":98756,"Promedio":32.10,"Promedio_Homogeneo":32.10,"Simbolo":"INAG","Variacion":-8.16,"Variacion_Homogeneo":-8.88,"Vencimiento":"48hs","Volumen_Nominal":3076]
我使用下一段代码将此 json 转换为数据帧:
def getFinanceHistoricalStockFromByma(tickerList):
dataFrameHistorical = pd.DataFrame()
for item in tickerList:
url = 'https://www.byma.com.ar/wp-admin/admin-ajax.php?action=get_historico_simbolo&simbolo=' + item + '&fecha=01-02-2018'
response = requests.get(url)
if response.content : print 'ok info Historical Stock'
data = response.json()
dfItem = jsonToDataFrame(data)
dataFrameHistorical = dataFrameHistorical.append(dfItem, ignore_index=True)
return dataFrameHistorical
def jsonToDataFrame(jsonStr):
return json_normalize(jsonStr)
json_normalize 的结果是 1 行和很多列。如何将此 json 响应转换为每个列表 1 行?
谢谢!
【问题讨论】:
你试过 pandas.read_json() 吗? pandas.pydata.org/pandas-docs/stable/generated/… @apteryx 是的......我试过没有运气。这种情况下的错误是“无效类型列表” 你试过 pd.DataFrame.from_records() 吗?json_normalize
不需要字符串。
【参考方案1】:
如果您将函数中的这一行:dfItem = jsonToDataFrame(data)
更改为:
dfItem = pd.DataFrame.from_records(data)
它应该工作。我使用 ['INAG'] 作为传递给您的 getFinanceHistoricalStockFromByma
函数的参数,替换了这一行来测试您的函数,它返回了一个 DataFrame。
【讨论】:
现在我收到消息“OverFLowError: Long too big to convert”,因为在一个值中我有值“7.665498762187621687e+26”:S 太棒了!如果我回答了您的原始问题,您可以通过单击复选标记来接受我的回答吗?关于溢出错误,您使用的是什么版本的熊猫? 我已经检查了标记:D。我正在使用 pandas 0.21.0 和 pandas-datareader 0.5.0 谢谢 :-) 我不确定你为什么会得到一个溢出错误,你得到这个是为了什么'simbolo',我可以看看。在最坏的情况下,您必须在尝试转换为 DataFrame 之前对数据进行一些预处理。 这里要记住的一点是data
必须首先转换为json
(例如使用json.loads
)。在pd.DataFrame.from_records
上使用字符串会将所有字符串拆分为每个单个字符的列:D以上是关于Python - 到 Pandas 数据框的 Json 列表的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中使用 Excel 文件作为 pandas 数据框的映射
如何在 Python 中创建具有两列作为元组或 Pandas 数据框的单个变量?