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 数据框的单个变量?

将来自一个数据框的值合并到 Pandas 中的新列中[重复]

Python:构建 Pandas 数据框的对象

Python pandas 数据框的str列内置的方法详解

保存和导出 python pandas 数据框的 dtypes 信息