2025年python函数to_dict使用

python函数to_dict使用to dict 函数是将数据框数据转换为字典形式 DataFrame to dict self orient dict into 都是转换为字典 但具体形式不同 orient dict 默认 字典套字典 column index value orient

大家好,我是讯享网,很高兴认识大家。

to_dict函数是将数据框数据转换为字典形式。

DataFrame.to_dict(*self*,orient='dict',into=) 都是转换为字典,但具体形式不同: orient='dict',默认,字典套字典:{column:{index:value}} orient ='list' ,字典里面为列表:{column:[values]} orient ='series',字典里为series形式:{column: Series(values)} orient ='split',字典里是数据对应列表:{'index':[index],'columns':[columns],'data': [values]} orient ='records',转化后是 list形式:[{column: value},...,{column:value}] orient ='index',字典里面同样有字典:{index:{column:value}} 

讯享网

具体在应用中,比如将数据框数据转换为字典形式后,进行列值匹配。

1. 使用to_dict函数转换

数据:

讯享网Cate_name=pd.read_excel('cate_name.xlsx') Cate_name 

在这里插入图片描述
讯享网
(这个数据很简单,也可以自己构造)

1.1各种转化形式

Cate_name.to_dict('dict') 转化后: {'cate': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G'}, 'cate_name': {0: '红色', 1: '橙色', 2: '黄色', 3: '绿色', 4: '青色', 5: '蓝色', 6: '紫色'}} 
讯享网Cate_name.to_dict('dict') 转化后: {'cate': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'cate_name': ['红色', '橙色', '黄色', '绿色', '青色', '蓝色', '紫色']} 
Cate_name.to_dict('series') 转化后: {'cate': 0 A 1 B 2 C 3 D 4 E 5 F 6 G Name: cate, dtype: object, 'cate_name': 0 红色 1 橙色 2 黄色 3 绿色 4 青色 5 蓝色 6 紫色 Name: cate_name, dtype: object} 
讯享网Cate_name.to_dict('split') 转化后: {'index': [0, 1, 2, 3, 4, 5, 6], 'columns': ['cate', 'cate_name'], 'data': [['A', '红色'], ['B', '橙色'], ['C', '黄色'], ['D', '绿色'], ['E', '青色'], ['F', '蓝色'], ['G', '紫色']]} 
Cate_name.to_dict('records') 转化后: [{'cate': 'A', 'cate_name': '红色'}, {'cate': 'B', 'cate_name': '橙色'}, {'cate': 'C', 'cate_name': '黄色'}, {'cate': 'D', 'cate_name': '绿色'}, {'cate': 'E', 'cate_name': '青色'}, {'cate': 'F', 'cate_name': '蓝色'}, {'cate': 'G', 'cate_name': '紫色'}] 
讯享网Cate_name.to_dict('index') 转化后: {0: {'cate': 'A', 'cate_name': '红色'}, 1: {'cate': 'B', 'cate_name': '橙色'}, 2: {'cate': 'C', 'cate_name': '黄色'}, 3: {'cate': 'D', 'cate_name': '绿色'}, 4: {'cate': 'E', 'cate_name': '青色'}, 5: {'cate': 'F', 'cate_name': '蓝色'}, 6: {'cate': 'G', 'cate_name': '紫色'}} 

2. 在列值匹配中的应用

首先这里构造一个数据

import pandas as pd import numpy as np cate=np.repeat(['A','B','C','D','E','F','G'],10) number1=np.random.randn(70) #符合正态分布的50个数 number2=np.random.randint(70,size=(70,)) #范围在0-50的50个整数 df_tmp=pd.DataFrame({ 
   'cate':cate, 'Num1':number1, 'Num2':number2}) print(df_tmp.shape) df_tmp.head() 

在这里插入图片描述
我们想要对cate列匹配中文名称,常用的是map函数:

2.1 merge函数列值匹配

讯享网Merge_df=pd.merge(df_tmp,Cate_name,on='cate',how='left') print(Merge_df.shape) Merge_df.head() 

在这里插入图片描述

2.2 使用map函数匹配

下面是使用to_dict函数将数据框进行转化,使用map函数进行匹配
先将数据框转化为字典形式:

cate_split=Cate_name.to_dict('split') cate_split['data'] 

输出:

讯享网[['A', '红色'], ['B', '橙色'], ['C', '黄色'], ['D', '绿色'], ['E', '青色'], ['F', '蓝色'], ['G', '紫色']] 

将上述列表数据保存为字典:

cate_dict=dict() for pair in cate_split['data']: key_v=pair[0] cate_dict[key_v]=pair[1] cate_dict 

输出:

讯享网{'A': '红色', 'B': '橙色', 'C': '黄色', 'D': '绿色', 'E': '青色', 'F': '蓝色', 'G': '紫色'} 

进行匹配:

Merge_df['cate_name2']=Merge_df['cate'].map(cate_dict) print(Merge_df.shape) Merge_df.head() 

在这里插入图片描述
同样可以匹配。


3. 检验两列值是否相同的小操作

这里插播一个数据框小操作,在上面的场景中,我们用两种方式匹配了中文名称,怎么知道匹配上的两列数值是一样的(cate_name和cate_name2),在数据量较大的情况下,一个个看是不可能的,这里有个小操作可以用。

就是利用布尔值

讯享网Merge_df['cate_name']==Merge_df['cate_name2'] 

在这里插入图片描述
会输出这两列数据,每一对是否相同,因为布尔值为True值可以求和。已知数据是70条,只要求和=70,说明都相同。

(Merge_df['cate_name']==Merge_df['cate_name2']).sum() 

3.1 验证一下

上面的数据是都相同的情况,那如果两列值有不相同的值,并且我们想找出是哪些值不同,如何操作?

先构造上不同的数据:

讯享网test_df=Merge_df.copy() data_sol=pd.DataFrame({ 
   'cate':['A','B','A'],'Num1':[0.1,0.2,0.1], 'Num2':[17,18,19],'cate_name':['红色','橙色','无色'], 'cate_name2':['蓝色','绿色','红色']}) test_df=test_df.append(data_sol).reset_index() print(test_df.shape) test_df.tail() 

在这里插入图片描述
(添加了三行数据,列值不相同)
查看列值相同的情况有多少行:

#查看每一行数字是否相同 val=test_df['cate_name']==test_df['cate_name2'] val.sum() 

输出:
70
查看两列数据,有几个不一样:

讯享网len(test_df['cate_name'].unique())-len(test_df['cate_name2'].unique()) 

输出:
1
(但这个没什么参考意义,因为计算的是其唯一值,如果上述结果是0,不能说明两列值的每一对都是相同的)
查看具体是哪些值不一样:

test_df['cate_name'][~val] 

输出:

讯享网70 红色 71 橙色 72 无色 Name: cate_name, dtype: object 

可以看到,是最后三行列值不同。

查看其index,并输出数据:

val_index=test_df['cate_name'][~val].index val_index 
讯享网test_df[test_df.index.isin(val_index)] 

在这里插入图片描述
这里就可以看到是哪些行的列值不同了。

小讯
上一篇 2025-01-28 13:00
下一篇 2025-01-18 09:14

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/48410.html