【问题标题】:How can I import a str with a list of dicts into a pandas dataframe?如何将带有字典列表的字符串导入熊猫数据框?
【发布时间】:2016-03-12 18:28:10
【问题描述】:

如何将这个包含数据的字符串从 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]

然后我再次尝试使用 index... 没有成功:

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 有线索吗?

【问题讨论】:

    标签: python json pandas sqlite dataframe


    【解决方案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        
    

    【讨论】:

    • 哇!!这有效!你神圣的eval() 命令救了我的工作。实际上我使用的是 python 2.x,但它仍然有效。我将深入研究eval() docs。真的谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2020-07-22
    • 2017-12-12
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多