【问题标题】:reading json to pandas DataFrame but with thousands of rows to pandas append将json读取到pandas DataFrame,但有数千行到pandas append
【发布时间】:2019-04-22 00:00:24
【问题描述】:

我有一个文本文件,其中的每一行我都清理为 json 格式。我可以读取每一行,清理它们,并将它们转换为熊猫数据框。

我的问题是我想将它们全部添加/组合到一个数据框中,但是有超过 20 万行。

我将每一行读为 'd' = '{"test1":"test2","data":{"key":{"isin":"test3"},"creationTimeStamp":1541491884194,"signal":0,"hPreds":[0,0,0,0],"bidPrice":6.413000,"preferredBidSize":1,"offerPrice":6.415000,"preferredOfferSize":1,"averageTradeSize":1029,"averageTradePrice":0.065252,"changedValues":true,"test4":10,"snapshot":false}}'

假设我能够将每一行转换为熊猫...有没有办法将每一行附加到熊猫数据框中,这样它会非常快。现在,超过 200k 行,追加需要几个小时...读取文件本身需要不到 5 分钟...

file ='fileName.txt'
with open(file) as f:
    content = f.readlines()
content = [x.strip() for x in content]

data = pd.DataFrame()
count = 0
for line in content:
    line = line.replace('{"string1','')
    z = line.splitlines()
    z[0] = z[0][:-1]
    z = pd.read_json('[%s]' % ','.join(z))

    data = data.append(z)

【问题讨论】:

    标签: json python-3.x pandas


    【解决方案1】:

    您可以联系Series

    pd.Series(d)
    Out[154]: 
    averageTradePrice              0.065
    averageTradeSize                 109
    bidPrice                        6.13
    changedValues                   True
    creationTimeStamp           15414994
    Preds                   [0, 0, 0, 0]
    key                  {'epic': 'XXX'}
    dataLevel                         10
    offerPrice                     3.333
    dtype: object
    

    Predskey 的值是 listdict,这就是为什么当你将它传递给 DataFrame 时它会标记为:

    ValueError: 数组的长度必须相同


    既然你提到了json

    from pandas.io.json import json_normalize
    json_normalize(d)
    Out[157]: 
              Preds  averageTradePrice     ...      key.epic  offerPrice
    0  [0, 0, 0, 0]              0.065     ...           XXX       3.333
    [1 rows x 9 columns]
    

    【讨论】:

    • 感谢@W-B。我尝试了你的解决方案,虽然它适用于我提供的测试文本字符串......不幸的是,它似乎不适用于我真正引入的(非常长的)实际文本字符串。
    • 为了提供一些上下文,我的文件 f 实际上是一个 > 250k 行的文本文件,我正在尝试读取每一行,将每一行转换为 pandaFrame,然后附加它......我有一些使用 pd.read_json(...) 的原始代码;但它不再起作用了......
    • @Kiann 你试过 json_normalize
    • stackoverflow.com/users/7964527/w-b;是的,我确实尝试过 json_normalize.. 错误消息:AttributeError: 'str' object has no attribute 'values'
    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2017-04-29
    • 1970-01-01
    • 2013-06-07
    • 2016-01-31
    • 2021-04-05
    相关资源
    最近更新 更多