Chuyển đổi từ điển lồng nhau sang excel python

Trong hướng dẫn này, bạn sẽ học cách chuyển đổi danh sách từ điển Python thành Khung dữ liệu Pandas. Pandas cung cấp một số cách khác nhau để chuyển đổi từ điển thành DataFrame. Bạn sẽ tìm hiểu cách sử dụng phương thức Pandas from_dict, hàm tạo DataFrame và hàm json_normalize

Đến cuối hướng dẫn này, bạn sẽ học được

  • Cách chuyển đổi danh sách từ điển thành Pandas DataFrame
  • Cách làm việc với các nhóm cột khác nhau trong từ điển
  • Cách đặt chỉ mục khi chuyển đổi danh sách từ điển thành DataFrame
  • Cách chuyển đổi từ điển lồng nhau thành Pandas DataFrame

Mục lục

Tóm tắt các phương pháp

Bảng bên dưới chia nhỏ các cách khác nhau mà bạn có thể đọc danh sách từ điển vào Khung dữ liệu Pandas. Mỗi trong số này được đề cập sâu trong suốt hướng dẫn

Tên phương thứcHoạt động với các phím bị thiếuChỉ đọc một số cộtĐặt chỉ mụcĐọc từ điển lồng nhauDataFrame()YesYesYesNofrom_dict()YesYesChỉ sử dụng .set_index()Nofrom_records()YesYesYesNojson_normalize()YesYesYesYesKhám phá các phương pháp khác nhau để đọc danh sách từ điển vào Pandas DataFrame

Chuyển đổi danh sách từ điển thành khung dữ liệu Pandas

Trong phần này, bạn sẽ tìm hiểu cách chuyển đổi danh sách từ điển sang Khung dữ liệu Pandas bằng lớp Pandas DataFrame. Bằng cách chuyển vào danh sách từ điển, bạn có thể dễ dàng tạo DataFrame

Mỗi từ điển sẽ đại diện cho một bản ghi trong DataFrame, trong khi các khóa trở thành các cột. Hãy xem một ví dụ trong đó mỗi từ điển chứa mọi khóa

# Converting a List of Dictionaries to a DataFrame
import pandas as pd

list_of_dicts = [
{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36, 'Location': 'London'}]

df = pd.DataFrame(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36   London

Vì mỗi từ điển trong danh sách chứa các khóa giống nhau nên chúng tôi có thể sử dụng một số phương pháp khác nhau để thực hiện việc này. Các phương pháp khác sau đây cũng sẽ hoạt động

# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)

Làm việc với các phím bị thiếu khi chuyển đổi danh sách từ điển thành khung dữ liệu Pandas

Bây giờ chúng ta hãy xem một ví dụ phức tạp hơn. Trong ví dụ bên dưới, chúng tôi sẽ cung cấp các từ điển trong đó một từ điển sẽ thiếu khóa. Hãy sử dụng phương pháp .from_dict() để đọc danh sách để xem dữ liệu sẽ được đọc như thế nào

# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN

Phương thức này trả về cùng một phiên bản, ngay cả khi bạn sử dụng hàm tạo

# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
0, phương thức .from_dict() hoặc phương thức
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
2. Từ điển nào thiếu khóa sẽ trả về giá trị thiếu,
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
3

Chỉ đọc một số cột khi chuyển đổi danh sách từ điển thành khung dữ liệu Pandas

Có thể nhiều lần bạn muốn đọc từ điển vào Khung dữ liệu Pandas, nhưng chỉ muốn đọc một tập hợp con của các cột. Trong trường hợp này, bạn có thể sử dụng tham số

# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
4. Lưu ý rằng tham số này chỉ khả dụng trong hàm tạo
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
0 và phương thức
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
6. Sử dụng tham số này trong phương thức
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
7 sẽ tăng
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
8

Hãy tải cùng một danh sách từ điển nhưng chỉ đọc hai trong số các cột

# Reading only a subset of columns
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_records(list_of_dicts, columns=['Name', 'Age'])
# Same as: df = pd.DataFrame(list_of_dicts, columns=['Name', 'Age'])

print(df)

# Returns:
#    Name  Age
# 0   Nik   33
# 1  Kate   32
# 2  Evan   36

Đặt chỉ mục khi chuyển đổi danh sách từ điển thành khung dữ liệu Pandas

Có hai loại chỉ mục khác nhau mà bạn có thể muốn đặt khi tạo DataFrame

  1. Chỉ mục DataFrame không phải là một phần của dữ liệu bạn đang đọc (chẳng hạn như 1, 2, 3) hoặc
  2. Chỉ mục DataFrame từ dữ liệu mà bạn đang đọc (chẳng hạn như một trong các cột)

Hãy xem trường hợp sử dụng đầu tiên. Đối với điều này, chúng ta chỉ có thể dựa vào hàm tạo

# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
0 và phương thức
# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
6. Để truyền vào một chỉ mục tùy ý, chúng ta có thể sử dụng tham số
# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN
1 để truyền vào một danh sách các giá trị

Hãy xem cách điều này được thực hiện trong Pandas

# Setting an index when reading a list of dictionaries
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36, 'Location': 'New York'}]

df = pd.DataFrame.from_records(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])
# Same as: df = pd.DataFrame(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])

print(df)

# Returns:
#               Name  Age  Location
# Employee_001   Nik   33   Toronto
# Employee_002  Kate   32    London
# Employee_003  Evan   36  New York

Để đọc danh sách từ điển và đặt chỉ mục dựa trên một trong các khóa, chúng ta có thể sử dụng bất kỳ phương pháp nào trong ba phương pháp nêu trên. Mặc dù Pandas không trực tiếp cung cấp tham số để thực hiện việc này, nhưng chúng ta có thể sử dụng phương thức .set_index() để thực hiện việc này

Hãy đọc dữ liệu của chúng tôi và sử dụng cột

# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN
3 làm chỉ mục

# Setting a column as an index
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36, 'Location': 'New York'}]

df = pd.DataFrame(list_of_dicts).set_index('Name')
# Same as: df = pd.DataFrame.from_dict(list_of_dicts).set_index('Name')
# Same as: df = pd.DataFrame.from_records(list_of_dicts).set_index('Name')

print(df)

# Returns:
#       Age  Location
# Name               
# Nik    33   Toronto
# Kate   32    London
# Evan   36  New York

Trong phần cuối cùng, bạn sẽ học cách sử dụng hàm

# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN
4 để đọc danh sách các từ điển lồng vào Khung dữ liệu Pandas

json_chuẩn hóa. Đọc từ điển lồng nhau vào khung dữ liệu Pandas

Khi tải dữ liệu từ các nguồn khác nhau, chẳng hạn như API web, bạn có thể nhận được một danh sách các từ điển lồng nhau được trả về cho bạn. Khi đọc các danh sách từ điển này bằng các phương pháp được hiển thị ở trên, các từ điển lồng nhau sẽ chỉ được trả về dưới dạng từ điển trong một cột

Tuy nhiên, trong nhiều trường hợp, bạn sẽ muốn từng trường trong số này trả về cột riêng của mình. Đối với điều này, chúng ta có thể sử dụng chức năng

# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN
5

Hãy cùng xem một ví dụ trong đó các từ điển trong danh sách của chúng ta được lồng vào nhau và sử dụng hàm json_normalize để chuyển đổi nó thành DataFrame

# Convert a List of Nested Dictionaries to a DataFrame
import pandas as pd

list_of_dicts = [
    {'Name': 'Nik', 'Age': 33, 'Location': {'City': 'Toronto', 'Country': 'Canada'}},
    {'Name': 'Kate', 'Age': 32, 'Location': {'City': 'London', 'Country': 'UK'}},
    {'Name': 'Evan', 'Age': 36, 'Location': {'City': 'New York', 'Country': 'USA'}}
]

df = pd.json_normalize(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location.City Location.Country
# 0   Nik   33       Toronto           Canada
# 1  Kate   32        London               UK
# 2  Evan   36      New York              USA

Phần kết luận

Trong hướng dẫn này, bạn đã học cách đọc danh sách từ điển vào Khung dữ liệu Pandas. Bạn đã học cách sử dụng bốn cách khác nhau để thực hiện điều này. Bạn cũng đã học cách chỉ đọc một tập hợp con các cột, xử lý dữ liệu bị thiếu và cách đặt chỉ mục. Cuối cùng, bạn đã học cách đọc danh sách các từ điển lồng vào Khung dữ liệu Pandas của mình

Làm cách nào để chuyển đổi danh sách từ điển lồng nhau sang DataFrame trong Python?

Trước tiên, chúng tôi lấy danh sách từ điển lồng nhau và trích xuất các hàng dữ liệu từ đó. Sau đó, chúng tôi tạo một vòng lặp khác để nối các hàng vào danh sách mới ban đầu được tạo trống. Cuối cùng, chúng tôi áp dụng chức năng DataFrames trong thư viện gấu trúc để tạo Khung dữ liệu

Từ điển lồng nhau có thể có trong Python không?

Trong Python, Từ điển lồng nhau có thể được tạo bằng cách đặt các từ điển được phân tách bằng dấu phẩy nằm trong dấu ngoặc nhọn .