Python 将字典列表转换为数据帧

Python 将字典列表转换为数据帧,python,json,list,pandas,dictionary,Python,Json,List,Pandas,Dictionary,我面临的一个基本问题是,如何转换从使用json格式的文本解析列中获得的词典列表。以下是数据的简要快照: [{u'PAGE TYPE': u'used-serp.model.brand.city'}, {u'BODY TYPE': u'MPV Cars', u'ENGINE CAPACITY': u'1461', u'FUEL TYPE': u' Diesel', u'MODEL NAME': u'Renault Lodgy', u'OEM NAME': u'Renault',

我面临的一个基本问题是,如何转换从使用json格式的文本解析列中获得的词典列表。以下是数据的简要快照:

[{u'PAGE TYPE': u'used-serp.model.brand.city'},
 {u'BODY TYPE': u'MPV Cars',
  u'ENGINE CAPACITY': u'1461',
  u'FUEL TYPE': u' Diesel',
  u'MODEL NAME': u'Renault Lodgy',
  u'OEM NAME': u'Renault',
  u'PAGE TYPE': u'New-ModelPage.OverviewTab'},
 {u'PAGE TYPE': u'used-serp.brand.city'},
 {u'BODY TYPE': u'SUV Cars',
  u'ENGINE CAPACITY': u'2477',
  u'FUEL TYPE': u' Diesel',
  u'MODEL NAME': u'Mitsubishi Pajero',
  u'OEM NAME': u'Mitsubishi',
  u'PAGE TYPE': u'New-ModelPage.OverviewTab'},
 {u'BODY TYPE': u'Hatchback Cars',
  u'ENGINE CAPACITY': u'1198',
  u'FUEL TYPE': u' Petrol , Diesel',
  u'MODEL NAME': u'Volkswagen Polo',
  u'OEM NAME': u'Volkswagen',
  u'PAGE TYPE': u'New-ModelPage.GalleryTab'},
此外,我用来解析的代码详细如下:

stdf_noncookie = []
stdf_noncookiejson = []

for index, row in df_noncookie.iterrows():
    try:
        loop_data = json.loads(row['attributes'])
        stdf_noncookie.append(loop_data)
    except ValueError:
        loop_nondata = row['attributes']
        stdf_noncookiejson.append(loop_nondata)

stdf_noncookie是我正试图转换成熊猫数据帧的词典列表“属性”是包含json格式文本的列。我试着从中吸取一些教训,但这并不能解决我的问题。任何将词典列表转换为panda数据框的建议/提示都会很有帮助。

要将词典列表转换为panda数据框,请使用以下命令:

stdf_noncookiejson = pd.DataFrame.from_records(data)

DataFrame.from_records(数据,索引=None,排除=None,列=None,强制_float=False,nrows=None)

您可以在中读取时设置索引、命名列等

如果您使用的是json,也可以使用
read\u json
方法

stdf_noncookiejson = pd.read_json(data)

pandas.read_json(path_或_buf=None,orient=None,typ='frame',dtype=True,convert_axes=True,convert_dates=True, 保持默认日期为真,numpy为假,精确浮点为假, 日期(单位=无,编码=无,行=假)

参考这个

假设d是您的词典列表,只需使用:

df = pd.DataFrame(d)

简单地说,您可以使用pandas
DataFrame
构造函数

import pandas as pd

print (pd.DataFrame(data))

终于找到了一种将dict列表转换为panda数据帧的方法。代码如下:

Method A
stdf_noncookie = df_noncookie['attributes'].apply(json.loads)
stdf_noncookie = stdf_noncookie.apply(pd.Series)

Method B
stdf_noncookie = df_noncookie['attributes'].apply(json.loads)
stdf_noncookie = pd.DataFrame(stdf_noncookie.tolist())

方法A比方法B快得多。我将创建另一个帖子,就两种方法之间的差异寻求帮助。另外,在某些数据集上,方法B不起作用。

我可以通过列表理解来完成。但我的问题是,我把dict的json编码了,所以它们看起来像字符串

d = r.zrangebyscore('live-ticks', '-inf', time.time())
dform = [json.loads(i) for i in d]
df = pd.DataFram(dfrom)