Nic*_*sse 6 python json dataframe python-3.x pandas
我有一个文件夹,其中包含或多或少 10 个大小在 500 到 1000 Mb 之间的 json 文件。每个文件包含大约 1.000.000 行,如 loffowling:
{
"dateTime": '2019-01-10 01:01:000.0000'
"cat": 2
"description": 'This description'
"mail": 'mail@mail.com'
"decision":[{"first":"01", "second":"02", "third":"03"},{"first":"04", "second":"05", "third":"06"}]
"Field001": 'data001'
"Field002": 'data002'
"Field003": 'data003'
...
"Field999": 'data999'
}
Run Code Online (Sandbox Code Playgroud)
我的目标是用 Pandas 分析它,所以我想将来自所有文件的数据保存到 Dataframe 中。如果我循环所有文件,Python 会崩溃,因为我没有免费资源来管理数据。
至于我的目的,我只需要一个包含两列cat和dateTime所有文件的数据框,我认为它比包含所有列的整个数据框更轻,我试图使用以下代码段仅读取这两列:
注意:目前我只处理一个文件,当我得到一个快速阅读器代码时,我将循环到所有其他文件(A.json、B.json、...)
import pandas as pd
import json
import os.path
from glob import glob
cols = ['cat', 'dateTime']
df = pd.DataFrame(columns=cols)
file_name='this_is_my_path/File_A.json'
with open(file_name, encoding='latin-1') as f:
for line in f:
data=json.loads(line)
lst_dict=({'cat':data['cat'], 'dateTime':data['dateTime']})
df = df.append(lst_dict, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
该代码有效,但速度非常慢,因此在读取所有文件并存储到数据帧中时,一个文件需要一个多小时,通常需要 8-10 分钟。
有没有办法只读取两个特定列并以更快的方式附加到数据帧?
我尝试读取所有 JSON 文件并将其存储到数据帧中,然后删除所有列,但 'cat' 和 'dateTime' 但它似乎对我的 MacBook 来说太重了。
Moz*_*zak 10
我有同样的问题。我发现将字典附加到 DataFrame 非常非常慢。相反,将值提取为列表。就我而言,花了 14 秒而不是 2 小时。
cols = ['cat', 'dateTime']
data = []
file_name = 'this_is_my_path/File_A.json'
with open(file_name, encoding='latin-1') as f:
for line in f:
doc = json.loads(line)
lst = [doc['cat'], doc['dateTime']]
data.append(lst)
df = pd.DataFrame(data=data, columns=cols)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5152 次 |
| 最近记录: |