簡體   English   中英

僅讀取大型 JSON 中的特定字段並導入 Pandas 數據幀

[英]Read only specific fields from large JSON and import into a Pandas Dataframe

我有一個文件夾,其中包含或多或少 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'
}

我的目標是用 Pandas 分析它,所以我想將來自所有文件的數據保存到 Dataframe 中。 如果我循環所有文件,Python 會崩潰,因為我沒有免費資源來管理數據。

至於我的目的,我只需要一個包含所有文件中兩列catdateTime的數據框,我認為這比包含所有列的整個數據框更輕,我嘗試使用以下代碼段僅讀取這兩列:

注意:目前我只處理一個文件,當我得到一個快速閱讀器代碼時,我將循環到所有其他文件(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)

該代碼有效,但速度非常慢,因此在讀取所有文件並存儲到數據幀中時,一個文件需要一個多小時,通常需要 8-10 分鍾。

有沒有辦法只讀取兩個特定列並以更快的方式附加到數據幀?

我嘗試讀取所有 JSON 文件並將其存儲到數據幀中,然后刪除所有列,但“cat”和“dateTime”除外,但它對於我的 MacBook 來說似乎太重了。

我有同樣的問題。 我發現將 dict 附加到 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)

這會有所幫助嗎?

步驟 1. 從大熊貓“pandas.read_json()”中讀取您的 json 文件
第 2 步。然后從數據框中過濾掉您的 2 列。

如果您仍然面臨任何問題,請告訴我。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM