将 Pandas DataFrame 转换为字典

  1. 使用 to_dict() 函数将 Pandas DataFrame 转换为字典
  2. Pandas DataFrame 转换字典的方法
  3. Pandas DataFrame 转换为字典列表
  4. Pandas DataFrame 按行转为字典
  5. Dataframe 转为以一列为键的字典
  6. 使用 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 转换字典的方法

我们可以通过参数 listrecordsseriesindexsplitdict 来改变最终字典的格式。例如,当我们传递 listseries 作为参数时,我们将列名作为键,但值对分别被转换为列表和系列行。下面的例子将证明这一点。

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']}

相关文章 - Pandas DataFrame

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在 Pandas 中将 DataFrame 列转换为日期时间
  • 如何在 Pandas DataFrame 中将浮点数转换为整数