【问题标题】:Fast convert JSON column into Pandas dataframe快速将 JSON 列转换为 Pandas 数据框
【发布时间】:2017-05-03 17:56:44
【问题描述】:

我正在从一列存储为 JSON 的数据库(50k+ 行)中读取数据。我想将其提取到熊猫数据框中。 下面的 sn-p 工作正常,但效率相当低,并且在针对整个数据库运行时确实需要很长时间。 请注意,并非所有项目都具有相同的属性,并且 JSON 具有一些嵌套属性。

我怎样才能让它更快?

import pandas as pd
import json

df = pd.read_csv('http://pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])

df.data.apply(json.loads) \
       .apply(pd.io.json.json_normalize)\
       .pipe(lambda x: pd.concat(x.values))
###this returns a dataframe where each JSON key is a column

【问题讨论】:

  • df.data.apply(lambda x: pd.Series(json.loads(x))) 会做吗?
  • 您能否以不同的(任何一种标准)格式存储您粘贴的数据?
  • @JohnGalt: 有效,但这不会使字典变平
  • @MaxU:如果可能的话,我宁愿不更改抓取脚本

标签: python json pandas


【解决方案1】:

json_normalize 采用已处理的 json 字符串或 pandas 一系列此类字符串。

pd.io.json.json_normalize(df.data.apply(json.loads))

设置

import pandas as pd
import json

df = pd.read_csv('http://pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])

【讨论】:

  • 谢谢。这比您的第一个解决方案要快;)
  • 我收到此错误:'DataFrame' 对象没有属性'data'
  • @AliMirzaei 将其替换为您自己的列名。
  • 如果您的答案和 Madhur Yadav 结合起来,以便包含一个示例,那就太好了。
【解决方案2】:

我认为您可以先将stringdata 转换为dict,然后通过values 创建listnumpy arrays 和最后一个DataFrame.from_records

df = pd.read_csv('http://pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])

a = df.data.apply(json.loads).values.tolist() 
print (pd.DataFrame.from_records(a))

另一个想法:

 df = pd.json_normalize(df['data'])

【讨论】:

  • 谢谢 - 这比我最初的方法快 100 倍。唯一的问题是这不会扩展嵌套的字典。这可能吗?
  • 检查另一个答案 ;)
  • 快速问题@jezrael csv 的顺序和您从变量“a”制作的 df 是一样的吗?第一条记录将是第一条记录,第二条将是第二条记录,依此类推.. 他们会洗牌吗?
  • @skybunk - 是的,完全正确。没有理由shuffle
【解决方案3】:

数据 = {“事件”:[
{
“timemillis”:1563467463580, “日期”:“18.7.2019”, "时间":"18:31:03,580", "name":"播放器正在加载", “数据”:”” }, {
“timemillis”:1563467463668, “日期”:“18.7.2019”, "时间":"18:31:03,668", "name":"播放器已加载", “数据”:“5” } ] }

from pandas.io.json import json_normalize
result = json_normalize(data,'events')
print(result)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 2021-02-09
    • 2019-05-14
    • 2019-07-01
    • 2021-12-13
    • 2021-09-27
    • 2019-07-27
    • 2018-03-25
    相关资源
    最近更新 更多