如何将带有dicts列表的str导入到pandas数据帧中?

时间:2016-03-12 18:28:11

标签: python json pandas sqlite dataframe

如何将包含json数据的字符串转换为数据帧?

s = "[{u'website': u'', u'volume': u'0', u'price': u'0.00000510', u'id': u'', u'name': u''}, {u'website': u'', u'volume': u'0.00032510', u'price': u'0.0000000000000000', u'id': u' abcd', u'name': u' ABCD'}, {u'website': u'', u'volume': u'0', u'price': u'0.00000003', u'id': u' ktae', u'name': u' KTAE'}]"

我使用网站API获取此信息,将json响应转换为str并将其存储到sql数据库中。

现在我从我的数据库中获取了这个字符串,我想用它创建一个数据帧。

我该怎么做?

我尝试过这段代码,但没有成功:

jdata = json.load(s)
df = pd.DataFrame.from_records(jdata)

上面的代码生成了一个df [384806 rows x 1 columns]

然后我尝试再次使用索引......但没有成功:

columns = ['website', 'volume_btc', 'price_btc', 'id', 'name']
df = pd.DataFrame.from_records(jdata, index=columns)

错误讯息:

ValueError: Shape of passed values is (1, 384806), indices imply (1, 5)

如何使用列表推导将此信息从str获取为dict格式并将其导入到pandas数据框中?

也许是这样的......

dict_data = [ dict(y.split(':') for y in x.split(',')) for x in data2.split('}, {')]

我在this answer找到了它,但我不知道如何在我的问题中有效地使用它... Any1有线索?

1 个答案:

答案 0 :(得分:1)

我猜你的字符串s不是常规的JSON字符串。 但你可以尝试eval将它评估为python对象,dict列表,让pandas处理它:

In [12]: s = eval(s)

In [13]: pd.DataFrame(s)
Out[13]: 
      id   name               price      volume website
0                        0.00000510           0        
1   abcd   ABCD  0.0000000000000000  0.00032510        
2   ktae   KTAE          0.00000003           0