Hướng dẫn python list of json objects to dataframe - python danh sách các đối tượng json vào khung dữ liệu

Cuối cùng tôi cũng có đầu ra dữ liệu tôi cần từ một tệp có nhiều đối tượng JSON nhưng tôi cần một số trợ giúp với việc chuyển đổi đầu ra dưới đây thành một khung dữ liệu duy nhất khi nó lặp qua dữ liệu. Dưới đây là mã để tạo ra đầu ra bao gồm một mẫu về đầu ra trông như thế nào:

Dữ liệu gốc:

{
"zipcode":"08989",
"current"{"canwc":null,"cig":4900,"class":"observation","clds":"OVC","day_ind":"D","dewpt":19,"expireTimeGMT":1385486700,"feels_like":34,"gust":null,"hi":37,"humidex":null,"icon_code":26,"icon_extd":2600,"max_temp":37,"wxMan":"wx1111"},
"triggers":[53,31,9,21,48,7,40,178,55,179,176,26,103,175,33,51,20,57,112,30,50,113]
}
{
"zipcode":"08990",
"current":{"canwc":null,"cig":4900,"class":"observation","clds":"OVC","day_ind":"D","dewpt":19,"expireTimeGMT":1385486700,"feels_like":34,"gust":null,"hi":37,"humidex":null,"icon_code":26,"icon_extd":2600,"max_temp":37, "wxMan":"wx1111"},
"triggers":[53,31,9,21,48,7,40,178,55,179,176,26,103,175,33,51,20,57,112,30,50,113]
}

def lines_per_n(f, n):
    for line in f:
        yield ''.join(chain([line], itertools.islice(f, n - 1)))

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 5):
            try:
                jfile = json.loads(chunk)
                zipcode = jfile['zipcode']
                datetime = jfile['current']['proc_time']
                triggers = jfile['triggers']
                print pd.Series(jfile['zipcode']), 
                      pd.Series(jfile['current']['proc_time']),\
                      jfile['triggers']          
            except ValueError, e:
                pass
            else:
                pass

Đầu ra mẫu tôi nhận được khi tôi chạy những điều trên mà tôi muốn lưu trữ trong một khung dữ liệu gấu trúc dưới dạng 3 cột.

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]

Vì vậy, mã dưới đây có vẻ gần hơn rất nhiều ở chỗ nó mang lại cho tôi một DF vui nhộn nếu tôi vượt qua danh sách và chuyển DF. Bất kỳ ý tưởng về cách tôi có thể định hình lại điều này đúng cách?

def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]

Dataframe:

   0               1   2
0  08988  20131126102946  []
       0               1                                                  2
0  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...
       0               1   2
0  08988  20131126102946  []
       0               1                                                  2
0  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...

Đây là mã và đầu ra cuối cùng của tôi. Làm cách nào để chụp từng dữ liệu mà nó tạo ra thông qua vòng lặp và nối chúng một cách nhanh chóng dưới dạng một đối tượng DataFrame?

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        print pd.concat([series_chunk(chunk) for chunk in lines_per_n(f, 7)], axis=1).T

       0               1                                                  2
0  08988  20131126102946                                                 []
1  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...
       0               1                                                  2
0  08988  20131126102946                                                 []
1  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...

Bạn có thể chuyển đổi JSON thành Pandas DataFrame bằng cách sử dụng các chức năng ____ 13, ____ 14 và

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
5. Một số phương pháp này cũng được sử dụng để trích xuất dữ liệu từ các tệp JSON và lưu trữ chúng dưới dạng DataFrame.
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
6 là viết tắt của
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
7. JSON được sử dụng để chia sẻ dữ liệu giữa các máy chủ và ứng dụng web.

Trong bài viết này, tôi sẽ đề cập đến cách chuyển đổi JSON thành DataFrame bằng cách sử dụng các hàm

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
3,
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
9 và
def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
0.

1. Ví dụ nhanh về chuyển đổi JSON thành DataFrame

Nếu bạn đang vội, dưới đây là một số ví dụ nhanh về cách chuyển đổi JSON thành DataFrame.


# Use json_normalize() to convert JSON to DataFrame
dict= json.loads(data)
df = json_normalize(dict['technologies']) 

# Convert JSON to DataFrame Using read_json()
df2 = pd.read_json(jsonStr, orient ='index')

# Use pandas.DataFrame.from_dict() to Convert JSON to DataFrame
dict= json.loads(data)
df2 = pd.DataFrame.from_dict(dict, orient="index")

Bây giờ, hãy để xem với một ví dụ. Đầu tiên, tạo một chuỗi chứa JSON.


import pandas as pd
import json
from pandas import json_normalize
data = '''
{
"technologies":
         [
         { "Courses": "Spark", "Fee": 22000,"Duration":"40Days"},
         { "Courses": "PySpark","Fee": 25000,"Duration":"60Days"},
         { "Courses": "Hadoop", "Fee": 23000,"Duration":"50Days"}
         ],
"status": ["ok"]
}
'''
print(data)

Hàm

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
3 được sử dụng để chuyển đổi chuỗi JSON thành DataFrame. Bạn có thể tải Chuỗi JSON bằng hàm
def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
2. Chuyển đối tượng JSON cho
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
3, trả về một bản dữ liệu gấu trúc. Để tải dữ liệu JSON, tôi đang sử dụng thư viện JSON Python.


# Use json_normalize() to convert JSON to DataFrame
dict = json.loads(data)
df2 = json_normalize(dict['technologies']) 
print(df2)

Năng suất dưới đầu ra.


   Courses    Fee Duration
0    Spark  22000   40Days
1  PySpark  25000   60Days
2   Hadoop  23000   50Days

3. Đọc tệp JSON vào DataFrame

Bạn có thể chuyển đổi JSON thành Pandas DataFrame bằng cách sử dụng

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
9. Chỉ cần chuyển chuỗi JSON cho chức năng. Nó có nhiều tham số, đối với trường hợp của chúng tôi, tôi đang sử dụng
def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
5 chỉ định định dạng của chuỗi JSON. Hàm này cũng được sử dụng để đọc các tệp JSON vào Pandas DataFrame.


import pandas as pd
jsonStr = '''{"Index0":{"Courses": "Pandas","Discount": "1200"},
           "Index1":{"Courses": "Hadoop","Discount": "1500"},
           "Index2":{"Courses": "Spark","Discount": "1800"}
          }'''
# Convert JSON to DataFrame Using read_json()
df2 = pd.read_json(jsonStr, orient ='index')
print(df2)

Năng suất dưới đầu ra.

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
0

4. Sử dụng dataFrame.from_dict () để chuyển đổi json & nbsp; thành dataFrame

Đầu tiên tải chuỗi JSON vào một đối tượng Dict và sau đó sử dụng

def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
6 để tạo khung dữ liệu từ đối tượng Dict trong đó các khóa từ Dict được sử dụng làm chỉ mục. Cài đặt
def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
5 param thành ____28 Tạo một khung dữ liệu với các khóa từ dữ liệu làm tên cột của nó.

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
1

Năng suất dưới đầu ra.

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
2

Sự kết luận

Trong bài viết này, bạn đã học được cách chuyển đổi JSON thành DataFrame bằng cách sử dụng các phương thức

08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
08988 20131126102946 []
08989 20131126102946 [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]
00544 20131126102946 [178, 30, 176, 103, 179, 112, 21, 20, 48]
3,
   0               1   2
0  08988  20131126102946  []
       0               1                                                  2
0  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...
       0               1   2
0  08988  20131126102946  []
       0               1                                                  2
0  08989  20131126102946  [53, 31, 9, 21, 48, 7, 40, 178, 55, 179, 176, ...
0and
def series_chunk(chunk):
    jfile = json.loads(chunk)
    zipcode = jfile['zipcode']
    datetime = jfile['current']['proc_time']
    triggers = jfile['triggers']
    return jfile['zipcode'],\
            jfile['current']['proc_time'],\
            jfile['triggers']

for fin in glob.glob('*.txt'):
    with open(fin) as f:
        for chunk in lines_per_n(f, 7):
            df1 = pd.DataFrame(list(series_chunk(chunk)))
            print df1.T

[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
[u'08988', u'20131126102946', []]
[u'08989', u'20131126102946', [53, 31, 9, 21, 48, 7, 40, 178, 55, 179]]
0 và với nhiều ví dụ hơn.

Học hỏi hạnh phúc !!

Những bài viết liên quan

  • Pandas Sum DataFrame Cột với các ví dụ
  • Cách in Pandas DataFrame mà không cần chỉ mục
  • Đổi tên các giá trị chỉ mục của Pandas DataFrame
  • Pandas chuyển đổi DateTime sang ngày
  • Đổi tên các cột cụ thể trong gấu trúc

Người giới thiệu

  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html
  • https://www.json.org/

Làm thế nào để bạn tạo một khung dữ liệu từ dữ liệu JSON trong Python?

Hàm json_normalize () được sử dụng để chuyển đổi chuỗi JSON thành DataFrame. Bạn có thể tải chuỗi JSON bằng JSON. tải () hàm. Chuyển đối tượng JSON cho json_normalize (), trả về một khung dữ liệu gấu trúc.. You can load JSON string using json. loads() function. Pass JSON object to json_normalize() , which returns a Pandas DataFrame.

Làm thế nào để bạn chuyển đổi đối tượng json thành gấu trúc dataframe?

Làm thế nào để chuyển đổi JSON thành một khung dữ liệu gấu trúc..
Đọc JSON đơn giản từ một tập tin cục bộ ..
Đọc JSON đơn giản từ URL ..
Danh sách lồng phẳng từ đối tượng JSON ..
Làm phẳng danh sách lồng nhau và dict từ đối tượng JSON ..
Trích xuất một giá trị từ JSON được lồng sâu ..

Làm cách nào để đọc tệp JSON vào DataFrame trong Python?

Để đọc các tệp, chúng tôi sử dụng hàm read_json () và thông qua nó, chúng tôi chuyển đường dẫn đến tệp JSON mà chúng tôi muốn đọc.Khi chúng tôi làm điều đó, nó sẽ trả về một Data DataFrame (một bảng các hàng và cột) lưu trữ dữ liệu.use read_json() function and through it, we pass the path to the JSON file we want to read. Once we do that, it returns a “DataFrame”( A table of rows and columns) that stores data.

Làm thế nào để bạn chuyển đổi một danh sách thành DataFrame trong Python?

Chuyển đổi danh sách thành DataFrame trong Python..
2) Sử dụng danh sách với tên chỉ mục và cột.Chúng ta có thể tạo khung dữ liệu bằng cách đặt tên cho cột và lập chỉ mục các hàng.....
3) Sử dụng hàm zip ().....
4) Tạo từ danh sách đa chiều.....
5) Sử dụng danh sách đa chiều với tên cột.....
6) Sử dụng danh sách trong từ điển ..