將 Pandas DataFrame 轉換為字典
- 
          
            使用 
to_dict()函式將 Pandas DataFrame 轉換為字典 - Pandas DataFrame 轉換字典的方法
 - Pandas DataFrame 轉換為字典列表
 - Pandas DataFrame 按行轉為字典
 - Dataframe 轉為以一列為鍵的字典
 - 
          
            使用 
dict()和zip()函式將 Pandas DataFrame 轉為字典 
本教程將介紹如何將 Pandas DataFrame 轉換為以索引列元素為鍵,其他列的相應元素為值的字典。我們將在文章中使用以下 DataFrame。
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
print(df)
輸出:
   Name  Age Course
0   Jay   16    BBA
1  Jack   19  BTech
2  Mark   18    BSc
使用 to_dict() 函式將 Pandas DataFrame 轉換為字典
Pandas to_dict() 函式將一個 DataFrame 轉換為一個字典。引數決定了字典的格式和鍵值對的關聯方式。下面是一個使用 to_dict() 將 DataFrame 轉換為 Dictionary 的基本示例。
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d1 = df.to_dict()
print(d1)
輸出:
{'Name': {0: 'Jay', 1: 'Jack', 2: 'Mark'}, 'Age': {0: 16, 1: 19, 2: 18}, 'Course': {0: 'BBA', 1: 'BTech', 2: 'BSc'}}
正如你在輸出中看到的,列名被轉換為鍵,每條記錄作為值,索引作為它們的鍵。
Pandas DataFrame 轉換字典的方法
我們可以通過引數 list、records、series、index、split 和 dict 來改變最終字典的格式。例如,當我們傳遞 list 和 series 作為引數時,我們將列名作為鍵,但值對分別被轉換為列表和系列行。下面的例子將證明這一點。
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d_list = df.to_dict("list")
print(d_list)
d_series = df.to_dict("series")
print(d_series)
輸出:
{'Name': ['Jay', 'Jack', 'Mark'], 'Age': [16, 19, 18], 'Course': ['BBA', 'BTech', 'BSc']}
{'Name': 0     Jay
1    Jack
2    Mark
Name: Name, dtype: object, 'Age': 0    16
1    19
2    18
Name: Age, dtype: int64, 'Course': 0      BBA
1    BTech
2      BSc
Name: Course, dtype: object}
Pandas DataFrame 轉換為字典列表
我們也可以將每一行作為一個單獨的字典傳遞給函式 records。最後的結果是一個列表,每一行都是一個字典。例如:
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d_records = df.to_dict("records")
print(d_records)
輸出:
[{'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}]
Pandas DataFrame 按行轉為字典
但是在很多情況下,我們可能不希望列名作為字典的鍵。對於這種情況,我們可以傳遞 index 來使 DataFrame 索引作為鍵。下面的程式碼片段展示了這一點。
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d_index = df.to_dict("index")
print(d_index)
輸出:
{0: {'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, 1: {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, 2: {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}}
Dataframe 轉為以一列為鍵的字典
但是,如果我們喜歡用一列的元素作為鍵,而用其他列的元素作為值呢?這可以通過簡單地將所需的列作為 DataFrame 的索引,並使用 .T() 函式對其進行轉置來實現。
例子:
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d_names = df.set_index("Name").T.to_dict("list")
print(d_names)
輸出:
{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
使用 dict() 和 zip() 函式將 Pandas DataFrame 轉為字典
Python dict() 函式也可以將 Pandas DataFrame 轉換為字典。我們還應該使用 zip() 函式,將各個列作為它的引數來建立並行迭代器。然後 zip() 函式將在每次迭代中產生一行的所有值。
import pandas as pd
df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)
d = dict([(i, [a, b]) for i, a, b in zip(df["Name"], df["Age"], df["Course"])])
print(d)
輸出:
{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn