Python membagi kamus menjadi beberapa kolom

Saya memiliki data yang disimpan dalam database postgreSQL. Saya menanyakan data ini menggunakan Python2. 7 dan mengubahnya menjadi Pandas DataFrame. Namun, kolom terakhir dari kerangka data ini memiliki kamus nilai di dalamnya. DataFrame df terlihat seperti ini

Station ID     Pollutants
8809           {"a": "46", "b": "3", "c": "12"}
8810           {"a": "36", "b": "5", "c": "8"}
8811           {"b": "2", "c": "7"}
8812           {"c": "11"}
8813           {"a": "82", "c": "15"}

Saya perlu membagi kolom ini menjadi kolom terpisah, sehingga DataFrame `df2 terlihat seperti ini

Station ID     a      b       c
8809           46     3       12
8810           36     5       8
8811           NaN    2       7
8812           NaN    NaN     11
8813           82     NaN     15
_

Masalah utama yang saya alami adalah daftarnya tidak sama panjangnya. Tetapi semua daftar hanya berisi hingga 3 nilai yang sama. 'a', 'b', dan 'c'. Dan mereka selalu muncul dalam urutan yang sama ('a' first, 'b' second, 'c' third)

Kode berikut DIGUNAKAN untuk bekerja dan mengembalikan apa yang saya inginkan (df2)

objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
print(df2)

Saya menjalankan kode ini minggu lalu dan berfungsi dengan baik. Tapi sekarang kode saya rusak dan saya mendapatkan kesalahan ini dari baris [4]

IndexError: out-of-bounds on slice (end) 

Saya tidak membuat perubahan pada kode tetapi sekarang saya mendapatkan kesalahan. Saya merasa ini karena metode saya tidak kuat atau tepat

Setiap saran atau panduan tentang cara membagi kolom daftar ini menjadi kolom terpisah akan sangat dihargai

EDIT. Saya pikir .tolist() dan. terapkan metode tidak berfungsi pada kode saya karena ini adalah salah satu string Unicode, mis. e

#My data format 
u{'a': '1', 'b': '2', 'c': '3'}

#and not
{u'a': '1', u'b': '2', u'c': '3'}
_

Data diimpor dari database postgreSQL dalam format ini. Adakah bantuan atau ide dengan masalah ini?

Dalam tutorial ini, Anda akan belajar cara mengonversi daftar kamus Python menjadi Pandas DataFrame. Panda menyediakan sejumlah cara berbeda untuk mengonversi kamus menjadi DataFrame. Anda akan belajar cara menggunakan metode Pandas from_dict, konstruktor DataFrame, dan fungsi json_normalize

Di akhir tutorial ini, Anda akan belajar

  • Cara mengonversi daftar kamus ke Pandas DataFrame
  • Cara bekerja dengan kumpulan kolom yang berbeda di seluruh kamus
  • Cara mengatur indeks saat mengonversi daftar kamus ke DataFrame
  • Cara mengonversi kamus bersarang ke Pandas DataFrame

Daftar isi

Ringkasan Metode

Tabel di bawah merinci berbagai cara di mana Anda dapat membaca daftar kamus ke Pandas DataFrame. Masing-masing dibahas secara mendalam di seluruh tutorial

Nama MetodeBerfungsi dengan kunci yang hilangBaca hanya beberapa kolomAtur indeksBaca kamus bersarangDataFrame()YesYesYesNofrom_dict()YesYesOnly using .set_index()Nofrom_records()YesYesNojson_normalize()YesYesYesYesExploring different methods to read the dictionary to a Pandas DataFrame

Mengonversi Daftar Kamus menjadi Pandas DataFrame

Di bagian ini, Anda akan mempelajari cara mengonversi daftar kamus ke Pandas DataFrame menggunakan kelas Pandas DataFrame. Dengan mengirimkan daftar kamus, Anda dapat dengan mudah membuat DataFrame

Setiap kamus akan mewakili catatan di DataFrame, sedangkan kuncinya menjadi kolom. Mari kita lihat contoh di mana setiap kamus berisi setiap kunci

# 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

Karena setiap kamus dalam daftar berisi kunci yang sama, kami dapat menggunakan sejumlah metode berbeda untuk melakukannya. Metode berikut lainnya juga akan berhasil

# 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)
_

Bekerja dengan Kunci yang Hilang Saat Mengonversi Daftar Kamus ke DataFrame Pandas

Sekarang mari kita lihat contoh yang lebih kompleks. Dalam contoh di bawah ini, kami akan menyediakan kamus di mana salah satu kamus akan kehilangan kunci. Mari gunakan metode .from_dict()_ untuk membaca daftar untuk melihat bagaimana data akan dibaca

# 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

Metode ini mengembalikan versi yang sama, bahkan jika Anda menggunakan konstruktor

# 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, metode .from_dict(), atau metode
# 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. Kamus apa pun yang tidak memiliki kunci akan mengembalikan nilai yang hilang,
# 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

Hanya Membaca Beberapa Kolom Saat Mengonversi Daftar Kamus ke DataFrame Pandas

Mungkin sering kali Anda ingin membaca kamus ke dalam Pandas DataFrame, tetapi hanya ingin membaca sebagian dari kolom. Dalam hal ini, Anda dapat menggunakan parameter

# 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. Perhatikan bahwa parameter ini hanya tersedia di konstruktor
# 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 dan metode
# 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. Menggunakan parameter ini dalam metode
# 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 akan memunculkan
# 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

Mari memuat daftar kamus yang sama tetapi hanya membaca dua kolom

# 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

Mengatur Indeks Saat Mengonversi Daftar Kamus ke DataFrame Pandas

Ada dua jenis indeks berbeda yang mungkin ingin Anda atur saat membuat DataFrame

  1. Indeks DataFrame yang bukan bagian dari data yang Anda baca (seperti 1, 2, 3), atau
  2. Indeks DataFrame dari data yang Anda baca (seperti salah satu kolom)

Mari kita lihat kasus penggunaan pertama. Untuk ini, kita hanya dapat mengandalkan konstruktor

# 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 dan metode
# 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. Untuk meneruskan indeks arbitrer, kita dapat menggunakan parameter
# 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 untuk meneruskan daftar nilai

Mari kita lihat bagaimana hal ini dilakukan di 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

Untuk membaca daftar kamus dan menetapkan indeks berdasarkan salah satu kunci, kita dapat menggunakan salah satu dari tiga metode yang dibahas di atas. Meskipun Panda tidak secara langsung memberikan parameter untuk melakukan ini, kita dapat menggunakan metode .set_index() untuk melakukannya

Mari baca data kita dan gunakan kolom

# 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 sebagai indeks

# 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

Di bagian terakhir, Anda akan mempelajari cara menggunakan fungsi

# 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 untuk membaca daftar kamus bersarang ke Pandas DataFrame

json_normalisasi. Membaca Kamus Bersarang ke Pandas DataFrame

Saat memuat data dari sumber yang berbeda, seperti API web, Anda mungkin mendapatkan daftar kamus bertingkat yang dikembalikan kepada Anda. Saat membaca daftar kamus ini menggunakan metode yang ditunjukkan di atas, kamus bersarang hanya akan dikembalikan sebagai kamus dalam kolom

Namun, dalam banyak kasus, Anda ingin setiap bidang ini mengembalikan kolomnya sendiri. Untuk ini, kita dapat menggunakan fungsi

# 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

Mari kita lihat contoh di mana kamus daftar kita bersarang dan gunakan fungsi json_normalize untuk mengonversinya menjadi 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

Kesimpulan

Dalam tutorial ini, Anda belajar cara membaca daftar kamus ke Pandas DataFrame. Anda belajar bagaimana menggunakan empat cara berbeda untuk mencapai hal ini. Anda juga belajar cara membaca subkumpulan kolom saja, menangani data yang hilang, dan cara menyetel indeks. Terakhir, Anda belajar cara membaca daftar kamus bersarang ke Pandas DataFrame Anda

Bagaimana cara mengubah kamus menjadi dua kolom?

Pendekatan lain untuk mengonversi dua nilai kolom menjadi kamus adalah pertama-tama menetapkan nilai kolom yang kita perlukan sebagai kunci untuk diindeks untuk kerangka data dan kemudian menggunakan fungsi to_dict() Pandas . Ini membuat kamus untuk semua kolom dalam bingkai data. . This creates a dictionary for all columns in the dataframe.

Bagaimana cara membagi daftar kamus menjadi beberapa kolom dengan indeks yang sama?

Anda dapat menggunakan fungsi panda stack dan concat untuk melakukan ini. .
Pertama gunakan tumpukan untuk membatalkan daftar kolom var_A
Kemudian gunakan concat untuk menghapus kamus dan memasukkannya ke dalam kolom terpisah

Bagaimana Anda membagi teks menjadi kolom dengan Python?

split() Panda menyediakan metode untuk memisahkan string di sekitar pemisah/pembatas yang diteruskan. Setelah itu, string dapat disimpan sebagai daftar dalam satu rangkaian atau dapat juga digunakan untuk membuat beberapa bingkai data kolom dari satu string yang terpisah.

Bagaimana cara mengonversi kamus ke kolom dalam bingkai data?

Kita dapat mengonversi kamus menjadi kerangka data panda dengan menggunakan pd. DataFrame. from_dict() metode kelas .