pandas中字典和dataFrame的相互转换

在数据分析领域,pandas是一个常用的库,它可以实现各种数据操作和处理,包括数值计算、数据清洗、数据聚合和转换等。在这些操作中,数据格式的转换是一项基本的技能,特别是在大型数据集处理时,常常需要将不同格式的数据转换成pandas可以处理的格式,比如字典和dataFrame的相互转换。下面就让我们一起学习一下这方面的知识。

1. 字典转dataFrame

在pandas中,可以使用DataFrame()函数将字典转换成dataFrame,DataFrame()函数的语法如下:

import pandas as pd

df = pd.DataFrame(data=字典)

其中,data参数是一个字典对象,可以包含不同类型的数据,如数字、字符串、列表等。

1.1 示例

下面以一个包含学生信息的字典为示例,演示如何将该字典转换成dataFrame:

import pandas as pd

student_dict = {

'姓名': ['张三', '李四', '王五', '赵六'],

'性别': ['男', '男', '女', '男'],

'年龄': [20, 21, 19, 22],

'成绩': [88, 92, 85, 90]

}

df = pd.DataFrame(data=student_dict)

print(df)

输出结果:

姓名 性别 年龄 成绩

0 张三 男 20 88

1 李四 男 21 92

2 王五 女 19 85

3 赵六 男 22 90

可以看出,通过DataFrame()函数将字典转换成了一个dataFrame对象,并且每个元素的类型分别为字符串、整数和列表。

1.2 指定列顺序

如果要指定dataFrame中列的顺序,可以使用columns参数,如下所示:

df = pd.DataFrame(data=student_dict, columns=['姓名', '年龄', '性别', '成绩'])

print(df)

输出结果:

姓名 年龄 性别 成绩

0 张三 20 男 88

1 李四 21 男 92

2 王五 19 女 85

3 赵六 22 男 90

可以看到,通过指定columns参数,可以改变dataFrame中列的顺序。

2. dataFrame转字典

如果要将一个dataFrame对象转换成字典,可以使用to_dict()函数。to_dict()函数的语法如下:

字典 = dataFrame.to_dict()

to_dict()函数有几个可选参数,包括orient、into和columns,下面我们将详细介绍。

2.1 orient参数

orient参数用来指定返回字典的格式,可选的取值有'dict'、'list'、'series'和'index'。默认值为'dict'。

当orient='dict'时,返回格式为字典,其中字典的键为dataFrame每列的名称,值为一个字典,包含每列的全部数据。

当orient='list'时,返回格式为列表,其中列表的元素为一个字典,包含一行数据。

当orient='series'时,返回格式为字典,其中字典的键为dataFrame每列的名称,值为一个Series对象。

当orient='index'时,返回格式为字典,其中字典的键为dataFrame每行的名称,值为一个字典,包含每行的全部数据。

2.2 columns参数

columns参数用来指定只转换哪些列的数据,默认情况下转换全部列。

2.3 示例

下面以一个包含学生信息的dataFrame为示例,演示如何将该dataFrame转换成字典:

import pandas as pd

student_data = {

'姓名': ['张三', '李四', '王五', '赵六'],

'性别': ['男', '男', '女', '男'],

'年龄': [20, 21, 19, 22],

'成绩': [88, 92, 85, 90]

}

df = pd.DataFrame(data=student_data)

print('原始dataFrame:\n', df)

# 转换为字典

# 返回格式为dict,默认情况下

dict1 = df.to_dict()

print('默认格式:\n', dict1)

# 返回格式为list

dict2 = df.to_dict(orient='list')

print('list格式:\n', dict2)

# 返回格式为series

dict3 = df.to_dict(orient='series')

print('series格式:\n', dict3)

# 返回格式为index

dict4 = df.to_dict(orient='index')

print('index格式:\n', dict4)

# 指定只转换名称为'姓名'和'成绩'的两列

dict5 = df[['姓名', '成绩']].to_dict()

print('两列字典:\n', dict5)

输出结果:

原始dataFrame:

姓名 性别 年龄 成绩

0 张三 男 20 88

1 李四 男 21 92

2 王五 女 19 85

3 赵六 男 22 90

默认格式:

{'姓名': {0: '张三', 1: '李四', 2: '王五', 3: '赵六'}, '性别': {0: '男', 1: '男', 2: '女', 3: '男'}, '年龄': {0: 20, 1: 21, 2: 19, 3: 22}, '成绩': {0: 88, 1: 92, 2: 85, 3: 90}}

list格式:

{'姓名': ['张三', '李四', '王五', '赵六'], '性别': ['男', '男', '女', '男'], '年龄': [20, 21, 19, 22], '成绩': [88, 92, 85, 90]}

series格式:

{'姓名': 0 张三

1 李四

2 王五

3 赵六

Name: 姓名, dtype: object, '性别': 0 男

1 男

2 女

3 男

Name: 性别, dtype: object, '年龄': 0 20

1 21

2 19

3 22

Name: 年龄, dtype: int64, '成绩': 0 88

1 92

2 85

3 90

Name: 成绩, dtype: int64}

index格式:

{0: {'姓名': '张三', '性别': '男', '年龄': 20, '成绩': 88}, 1: {'姓名': '李四', '性别': '男', '年龄': 21, '成绩': 92}, 2: {'姓名': '王五', '性别': '女', '年龄': 19, '成绩': 85}, 3: {'姓名': '赵六', '性别': '男', '年龄': 22, '成绩': 90}}

两列字典:

{'姓名': {0: '张三', 1: '李四', 2: '王五', 3: '赵六'}, '成绩': {0: 88, 1: 92, 2: 85, 3: 90}}

可以看出,to_dict()函数可以根据需要返回不同格式的字典,同时也可以根据需要指定只转换部分列的数据。

总结

本文介绍了pandas中字典和dataFrame的相互转换方法,并且详细介绍了DataFrame()函数和to_dict()函数的用法。通过本文的学习,读者可以掌握常见的数据格式转换技巧,提高数据处理和分析的能力。

后端开发标签