Làm phẳng danh sách từ điển Python Pandas

gấu trúc thật tuyệt. Bạn có thể làm khá nhiều thứ với nó. từ làm sạch dữ liệu đến dữ liệu nhanh viz. Làm việc với từ điển lồng nhau từ tệp json thì sao?

gấu trúc. json_normalize có thể thực hiện hầu hết công việc cho bạn [hầu hết thời gian]. Tuy nhiên, json_normalize bị chậm khi bạn muốn làm phẳng một tệp json lớn. Ngoài ra, nó làm phẳng toàn bộ từ điển khi mục tiêu của bạn thực sự có thể là xây dựng khung dữ liệu của riêng bạn bằng cách trích xuất các khóa và giá trị đã chọn

Làm thế nào bạn có thể làm điều đó? . bóng tối. Xem bên dưới hướng dẫn từng bước

Đầu tiên, lấy dữ liệu. Đây là một từ điển lồng nhau đơn giản từ một tệp json mẫu

Thứ hai, nhập các thư viện python và nhập dữ liệu của chúng tôi [tôi. e. từ điển lồng nhau] vào một cột duy nhất của khung dữ liệu gấu trúc

Lưu ý1. ngoài pandasglom, chúng tôi cũng sử dụng

['Given array:\n', [{'Mon': 2}, {'Tue': 11}, {'Wed': 3}]]
['Type of Object:\n', ]
['Flattened object:\n ', {'Wed': 3, 'Mon': 2, 'Tue': 11}]
['Type of flattened Object:\n', ]
0 để chuyển đổi biểu diễn chuỗi của từ điển thành từ điển python [thuần túy]

Lưu ý 2. từ điển được lưu trữ dưới dạng một chuỗi

Thứ ba, trích xuất các khóa đã chọn và các giá trị tương ứng từ từ điển lồng nhau bằng cách sử dụng glom và xây dựng khung dữ liệu của riêng bạn một cách nhanh chóng và hiệu quả. Trong ví dụ này, chúng tôi trích xuất khóa

['Given array:\n', [{'Mon': 2}, {'Tue': 11}, {'Wed': 3}]]
['Type of Object:\n', ]
['Flattened object:\n ', {'Wed': 3, 'Mon': 2, 'Tue': 11}]
['Type of flattened Object:\n', ]
2 và chúng tôi lưu giá trị của nó vào một cột riêng biệt có cùng tên trong khung dữ liệu pandas

Việc sử dụng cơ bản của glom yêu cầu hai đối số chính. [i] dữ liệu và [ii] đường dẫn đến các khóa có giá trị mà chúng tôi muốn trích xuất và ghi vào khung dữ liệu. Để biết thêm thông tin và sử dụng trước, hãy xem hướng dẫn về glom trong tài liệu;]

Ở đây chúng tôi đã tạo một hàm python không sử dụng bất kỳ gói phụ thuộc nào để làm phẳng từ điển python. Các tham số được truyền cho hàm flatten_dict[] là từ điển mà bạn muốn làm phẳng

Chúng tôi có một danh sách có các phần tử là từ điển. Chúng ta cần làm phẳng nó để có được một từ điển duy nhất trong đó tất cả các phần tử danh sách này hiện diện dưới dạng các cặp khóa-giá trị

Với cho và cập nhật

Chúng tôi lấy một từ điển trống và thêm các phần tử vào đó bằng cách đọc các phần tử từ danh sách. Việc bổ sung các phần tử được thực hiện bằng chức năng cập nhật

Ví dụ

Bản thử trực tiếp

listA = [{'Mon':2}, {'Tue':11}, {'Wed':3}]
# printing given arrays
print["Given array:\n",listA]
print["Type of Object:\n",type[listA]]
res = {}
for x in listA:
   res.update[x]
# Result
print["Flattened object:\n ", res]
print["Type of flattened Object:\n",type[res]]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

['Given array:\n', [{'Mon': 2}, {'Tue': 11}, {'Wed': 3}]]
['Type of Object:\n', ]
['Flattened object:\n ', {'Wed': 3, 'Mon': 2, 'Tue': 11}]
['Type of flattened Object:\n', ]

với giảm

Chúng ta cũng có thể sử dụng hàm rút gọn cùng với hàm cập nhật để đọc các phần tử từ danh sách và thêm nó vào từ điển trống

Ví dụ

Bản thử trực tiếp

from functools import reduce
listA = [{'Mon':2}, {'Tue':11}, {'Wed':3}]
# printing given arrays
print["Given array:\n",listA]
print["Type of Object:\n",type[listA]]
# Using reduce and update
res = reduce[lambda d, src: d.update[src] or d, listA, {}]
# Result
print["Flattened object:\n ", res]
print["Type of flattened Object:\n",type[res]]

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

['Given array:\n', [{'Mon': 2}, {'Tue': 11}, {'Wed': 3}]]
['Type of Object:\n', ]
['Flattened object:\n ', {'Wed': 3, 'Mon': 2, 'Tue': 11}]
['Type of flattened Object:\n', ]

Với ChainMap

Hàm ChainMap sẽ đọc từng phần tử trong danh sách và tạo đối tượng bộ sưu tập mới chứ không phải từ điển

giả sử tôi có DataFrame sau

import pandas as pd
df = pd.DataFrame[{'events': [ [{'event_text': 'hello1'}, {'event_text': 'hello2'}],
                                [{'event_text': 'whats up?'}],
                                [{'event_text': 'all good'}, {'event_text': 'bye'}] ]}]

print[df]
                                              events
0  [{'event_text': 'hello1'}, {'event_text': 'hel...
1                      [{'event_text': 'whats up?'}]
2  [{'event_text': 'all good'}, {'event_text': 'b...

Tôi đang cố trích xuất tất cả các văn bản vào một cột duy nhất như vậy

0     hello1
1     hello2
2  whats up?
3   all good
4        bye

Tôi nghĩ rằng giải pháp liên quan đến json_normalize. Tôi đã thử như sau

from pandas.io.json import json_normalize
df['events'].apply[json_normalize]

Nhưng nó mang lại kết quả sau

0      event_text
0     hello1
1     hello2
1                   event_text
0  whats up?
2      event_text
0   all good
1        bye

bất kỳ cách Pythonic nào để xử lý việc này?

Bạn có thể làm phẳng một từ điển bằng Python không?

Trong bài đăng này, chúng ta đã thấy 4 cách khác nhau để làm phẳng từ điển trong Python . Mỗi giải pháp đều có ưu và nhược điểm, và việc lựa chọn giải pháp tốt nhất là vấn đề sở thích cá nhân và những ràng buộc của dự án.

Làm cách nào để chuyển đổi danh sách từ điển thành danh sách danh sách trong Python?

Sử dụng Hàm map[] . Để tạo danh sách các danh sách, ánh xạ hàm list[] trên tất cả các thành phần của từ điển. mặt hàng[].

Làm cách nào để chuyển đổi danh sách từ điển thành từ điển đơn trong Python?

Phương pháp 2. Vòng lặp lồng nhau đơn giản .
Tạo một từ điển mới, trống
Đi qua từng từ điển trong danh sách từ điển
Đi qua từng cặp [khóa, giá trị] trong từ điển hiện tại
Thêm cặp [khóa, giá trị] vào từ điển mới—có thể ghi đè các khóa “cũ” bằng từ điển hiện tại

Chủ Đề