pandas中字典和dataFrame的相互转换

目录
  • 一、字典转dataFrame
    • 1、字典转dataFrame比较简单,直接给出示例:
  • 二、dataFrame转字典
    • 1、DataFrame.to_dict() 函数介绍
    • 2、orient =‘dict’
    • 3、 orient =‘list’
    • 4、orient =‘series’
    • 5、orient =‘split’
    • 6、orient =‘records’
    • 7、orient =‘index’
    • 8、指定列为key生成字典的实现步骤(按行)
    • 9、指定列为key,value生成字典的实现
  • 总结

一、字典转dataFrame

1、字典转dataFrame比较简单,直接给出示例:

import pandas as pd
dic = {
'name':['张三','李四','王二','麻子','小红','小兰','小玉','小强','小娟','小明'],
'num':[802,807,801,803,806,805,808,809,800,804],
'height': [183, 161, 163, 163, 156, 186, 184, 154, 153, 174],
'weight': [87, 60, 71, 74, 45, 50, 47, 67, 49, 70],
'gender': ['男', '男', '男', '男', '女', '女', '女', '男', '女', '男'],
'age': [25, 30, 25, 26, 27, 20, 23, 26, 30, 30]
}
df=pd.DataFrame(dic)
print(df)

结果:

二、dataFrame转字典

1、DataFrame.to_dict() 函数介绍

pandas中经常用的是 DataFrame.to_dict() 函数将dataFrame转化为字典类型(字典的查询速度很快

函数DataFrame.to_dict(orient=‘dict’, into=<class ‘dict’>)

  • orient =‘dict’,是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值)}};
  • orient =‘list’ ,转化后的字典形式:{column(列名) :{[values](值)}};
  • orient =‘series’ ,转化后的字典形式:{column(列名) : Series (values) (值)};
  • orient =‘split’ ,转化后的字典形式:{‘index’ : [index],‘columns’ :[columns],’data‘ : [values]};
  • orient =‘records’ ,转化后是 list形式:[{column(列名) :value(值)}…{column:value}];
  • orient =‘index’ ,转化后的字典形式:{index(值) :{column(列名) : value(值)}};

dataFrame.to_dict() 结果默认 index 是 key ,其他字段是和 index 对应的 value

2、orient =‘dict’

orient =‘dict’ 是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值)}}

dic1 = df.to_dict()
print(dic1)

结果:

{
'name': {0: '张三', 1: '李四', 2: '王二', 3: '麻子', 4: '小红', 5: '小兰', 6: '小玉', 7: '小强', 8: '小娟', 9: '小明'}, 
'num': {0: 802, 1: 807, 2: 801, 3: 803, 4: 806, 5: 805, 6: 808, 7: 809, 8: 800, 9: 804}, 
'height': {0: 183, 1: 161, 2: 163, 3: 163, 4: 156, 5: 186, 6: 184, 7: 154, 8: 153, 9: 174}, 
'weight': {0: 87, 1: 60, 2: 71, 3: 74, 4: 45, 5: 50, 6: 47, 7: 67, 8: 49, 9: 70}, 
'gender': {0: '男', 1: '男', 2: '男', 3: '男', 4: '女', 5: '女', 6: '女', 7: '男', 8: '女', 9: '男'}, 
'age': {0: 25, 1: 30, 2: 25, 3: 26, 4: 27, 5: 20, 6: 23, 7: 26, 8: 30, 9: 30}
}

3、 orient =‘list’

orient =‘list’ ,转化后的字典形式:{column(列名) :{[values](值)}};

dic1 = df.to_dict('list')
print(dic1)

结果:

{
'name': ['张三', '李四', '王二', '麻子', '小红', '小兰', '小玉', '小强', '小娟', '小明'], 
'num': [802, 807, 801, 803, 806, 805, 808, 809, 800, 804], 
'height': [183, 161, 163, 163, 156, 186, 184, 154, 153, 174], 
'weight': [87, 60, 71, 74, 45, 50, 47, 67, 49, 70], 
'gender': ['男', '男', '男', '男', '女', '女', '女', '男', '女', '男'], 
'age': [25, 30, 25, 26, 27, 20, 23, 26, 30, 30]
}

4、orient =‘series’

orient =‘series’ ,转化后的字典形式:{column(列名) : Series (values) (值)}

dic1 = df.to_dict('series')
print(dic1)

结果:

{
'name': 
0    张三
1    李四
2    王二
3    麻子
4    小红
5    小兰
6    小玉
7    小强
8    小娟
9    小明
Name: name, dtype: object, 
'num': 
0    802
1    807
2    801
3    803
4    806
5    805
6    808
7    809
8    800
9    804
Name: num, dtype: int64, 
'height':
0    183
1    161
2    163
3    163
4    156
5    186
6    184
7    154
8    153
9    174
Name: height, dtype: int64, 
'weight': 
0    87
1    60
2    71
3    74
4    45
5    50
6    47
7    67
8    49
9    70
Name: weight, dtype: int64, 
'gender': 
0    男
1    男
2    男
3    男
4    女
5    女
6    女
7    男
8    女
9    男
Name: gender, dtype: object, 
'age': 
0    25
1    30
2    25
3    26
4    27
5    20
6    23
7    26
8    30
9    30
Name: age, dtype: int64}

5、orient =‘split’

orient =‘split’ ,转化后的字典形式:{‘index’ : [index],‘columns’ :[columns],’data‘ : [values]}

{'index': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
'columns': ['name', 'num', 'height', 'weight', 'gender', 'age'], 
'data': [
['张三', 802, 183, 87, '男', 25],
['李四', 807, 161, 60, '男', 30], 
['王二', 801, 163, 71, '男', 25], 
['麻子', 803, 163, 74, '男', 26], 
['小红', 806, 156, 45, '女', 27], 
['小兰', 805, 186, 50, '女', 20], 
['小玉', 808, 184, 47, '女', 23], 
['小强', 809, 154, 67, '男', 26], 
['小娟', 800, 153, 49, '女', 30], 
['小明', 804, 174, 70, '男', 30]
]
}

6、orient =‘records’

orient =‘records’ ,转化后是 list形式:[{column(列名) :value(值)}…{column:value}]

dic1 = df.to_dict('records')
print(dic1)

结果:

[
{'name': '张三', 'num': 802, 'height': 183, 'weight': 87, 'gender': '男', 'age': 25}, 
{'name': '李四', 'num': 807, 'height': 161, 'weight': 60, 'gender': '男', 'age': 30}, 
{'name': '王二', 'num': 801, 'height': 163, 'weight': 71, 'gender': '男', 'age': 25}, 
{'name': '麻子', 'num': 803, 'height': 163, 'weight': 74, 'gender': '男', 'age': 26}, 
{'name': '小红', 'num': 806, 'height': 156, 'weight': 45, 'gender': '女', 'age': 27}, 
{'name': '小兰', 'num': 805, 'height': 186, 'weight': 50, 'gender': '女', 'age': 20}, 
{'name': '小玉', 'num': 808, 'height': 184, 'weight': 47, 'gender': '女', 'age': 23}, 
{'name': '小强', 'num': 809, 'height': 154, 'weight': 67, 'gender': '男', 'age': 26}, 
{'name': '小娟', 'num': 800, 'height': 153, 'weight': 49, 'gender': '女', 'age': 30}, 
{'name': '小明', 'num': 804, 'height': 174, 'weight': 70, 'gender': '男', 'age': 30}
]

7、orient =‘index’

orient =‘index’ ,转化后的字典形式:{index(值) :{column(列名) : value(值)}}

dic1 = df.to_dict('index')
print(dic1)

结果:

{
0: {'name': '张三', 'num': 802, 'height': 183, 'weight': 87, 'gender': '男', 'age': 25}, 
1: {'name': '李四', 'num': 807, 'height': 161, 'weight': 60, 'gender': '男', 'age': 30}, 
2: {'name': '王二', 'num': 801, 'height': 163, 'weight': 71, 'gender': '男', 'age': 25}, 
3: {'name': '麻子', 'num': 803, 'height': 163, 'weight': 74, 'gender': '男', 'age': 26}, 
4: {'name': '小红', 'num': 806, 'height': 156, 'weight': 45, 'gender': '女', 'age': 27}, 
5: {'name': '小兰', 'num': 805, 'height': 186, 'weight': 50, 'gender': '女', 'age': 20}, 
6: {'name': '小玉', 'num': 808, 'height': 184, 'weight': 47, 'gender': '女', 'age': 23}, 
7: {'name': '小强', 'num': 809, 'height': 154, 'weight': 67, 'gender': '男', 'age': 26}, 
8: {'name': '小娟', 'num': 800, 'height': 153, 'weight': 49, 'gender': '女', 'age': 30}, 
9: {'name': '小明', 'num': 804, 'height': 174, 'weight': 70, 'gender': '男', 'age': 30}
}

8、指定列为key生成字典的实现步骤(按行)

1、 set_index用于将想设置为key的列设置为数据框索引

 df.set_index("name", drop=True, inplace=True)
 # 其中 drop=True去重,inplace=True在原数据上更改

结果:

2、使用orient=index参数将索引用作字典键。

dictionary = df.to_dict(orient="index")
print(dictionary)

结果

{
'张三': {'num': 802, 'height': 183, 'weight': 87, 'gender': '男', 'age': 25}, 
'李四': {'num': 807, 'height': 161, 'weight': 60, 'gender': '男', 'age': 30}, 
'王二': {'num': 801, 'height': 163, 'weight': 71, 'gender': '男', 'age': 25}, 
'麻子': {'num': 803, 'height': 163, 'weight': 74, 'gender': '男', 'age': 26}, 
'小红': {'num': 806, 'height': 156, 'weight': 45, 'gender': '女', 'age': 27}, 
'小兰': {'num': 805, 'height': 186, 'weight': 50, 'gender': '女', 'age': 20}, 
'小玉': {'num': 808, 'height': 184, 'weight': 47, 'gender': '女', 'age': 23}, 
'小强': {'num': 809, 'height': 154, 'weight': 67, 'gender': '男', 'age': 26}, 
'小娟': {'num': 800, 'height': 153, 'weight': 49, 'gender': '女', 'age': 30}, 
'小明': {'num': 804, 'height': 174, 'weight': 70, 'gender': '男', 'age': 30}
}

3、将步骤1、2合起来写也可以,这里不修改源数据

dictionary = df.set_index("name", drop=True).to_dict(orient="index")

9、指定列为key,value生成字典的实现

1、指定一个列为key,一列为value

dictionary  = df.set_index("name")["num"].to_dict()
print(dictionary)

结果

{
'张三': 802, 
'李四': 807, 
'王二': 801, 
'麻子': 803, 
'小红': 806, 
'小兰': 805, 
'小玉': 808, 
'小强': 809, 
'小娟': 800, 
'小明': 804
}

2、指定多个列为key,一列为value

dictionary  = df.set_index(["name","num"])["weight"].to_dict()
print(dictionary)

结果:

{
('张三', 802): 87, 
('李四', 807): 60, 
('王二', 801): 71, 
('麻子', 803): 74, 
('小红', 806): 45, 
('小兰', 805): 50, 
('小玉', 808): 47, 
('小强', 809): 67, 
('小娟', 800): 49, 
('小明', 804): 70
}

3、指定一个列为key,多列为value

方法1(速度慢)

dictionary = {c0:[c1,c2] for c0,c1,c2 in zip(df['name'],df['num'],df['weight'])}
print(dictionary)

方法2(速度快)

dictionary = df[["name",'num','weight']].set_index('name').T.to_dict('list')
print(dictionary)

结果:

{
'张三': [802, 87], 
'李四': [807, 60], 
'王二': [801, 71], 
'麻子': [803, 74], 
'小红': [806, 45], 
'小兰': [805, 50], 
'小玉': [808, 47], 
'小强': [809, 67], 
'小娟': [800, 49], 
'小明': [804, 70]
}

4、 指定多列为key,多列为value

dictionary = df[["name",'num','weight',"age"]].set_index(['name','num']).T.to_dict('list')
print(dictionary)

结果:

{
('张三', 802): [87, 25], 
('李四', 807): [60, 30], 
('王二', 801): [71, 25], 
('麻子', 803): [74, 26], 
('小红', 806): [45, 27], 
('小兰', 805): [50, 20], 
('小玉', 808): [47, 23], 
('小强', 809): [67, 26], 
('小娟', 800): [49, 30], 
('小明', 804): [70, 30]
}

参考https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_dict.html

总结

到此这篇关于pandas中字典和dataFrame相互转换的文章就介绍到这了,更多相关字典和dataFrame相互转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas进阶教程之Dataframe的apply方法

    目录 apply方法介绍 用例1 用例2 用例3 总结 apply方法介绍 方法形式为 apply(func, axis=0, raw=False, result_type=None, agrs=(), **kwargs),沿Dataframe的轴应用func函数. 传递给函数的对象是Series对象,当axis=0时,其索引是Dataframe的索引:当axis=1时,其索引是Dataframe的列. 默认情况下,result_type=None,最终返回的类型是从func函数的返回推断出来的

  • pandas dataframe drop函数介绍

    使用drop函数删除dataframe的某列或某行数据: drop(labels, axis=0, level=None, inplace=False, errors='raise') -- axis为0时表示删除行,axis为1时表示删除列 常用参数如下:  import pandas as pd import numpy as np data = {'Country':['China','US','Japan','EU','UK/Australia', 'UK/Netherland'], '

  • Python Pandas 修改表格数据类型 DataFrame 列的顺序案例

    目录 一.修改表格数据类型 DataFrame 列的顺序 1.1主要知识点 1.2创建 python 文件 1.3运行结果 二.Pandas 如何统计某个数据列的空值个数 2.1主要知识点 2.2创建 python 文件 2.3运行结果 三.Pandas如何移除包含空值的行 3.1主要知识点 3.2创建 python 文件 3.3运行结果 四.Pandas如何精确设置表格数据的单元格的值 4.1主要知识点 4.2创建 python 文件 4.3运行结果 一.修改表格数据类型 DataFrame

  • Pandas DataFrame操作数据增删查改

    目录 一.DataFrame数据准备 二.增删改查操作 1,增 2,查 3,改 4,删 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只能在生成的新数据块中实现编辑效果.当inplace=True时执行内部编辑,不返回任何值,原数据发生改变. import numpy as np import pandas as pd #测试数据. df = pd.DataFrame(data = [['lisa','f',22]

  • Python Pandas实现DataFrame合并的图文教程

    目录 一.merge(合并)的语法: 二.以关键列来合并两个dataframe 三.理解merge时数量的对齐关系 1.one-to-one 一对一关系的merge 2.one-to-many 一对多关系的merge 3.many-to-many 多对多关系的merge 四.理解left join.right join.inner join.outer join的区别 1.inner join,默认 2.left join 3. right join 4. outer join 五.如果出现非K

  • 详解Pandas如何高效对比处理DataFrame的两列数据

    目录 楔子 combine_first combine update 楔子 我们在用 pandas 处理数据的时候,经常会遇到用其中一列数据替换另一列数据的场景.比如 A 列和 B 列,对 A 列中不为空的数据不作处理,对 A 列中为空的数据使用 B 列对应索引的数据进行替换.这一类的需求估计很多人都遇到,当然还有其它更复杂的. 解决这类需求的办法有很多,这里我们来推荐几个. combine_first 这个方法是专门用来针对空值处理的,我们来看一下用法. import pandas as pd

  • Python pandas按行、按列遍历DataFrame的几种方式

    目录 前言 一.按行遍历 1. 使用loc或iloc方法 2. 使用iterrows()方法 二.按列遍历 1. 使用列索引方式 2. 使用iteritems()方法 补充:遍历dataframe每一行的每一个元素 总结 前言 在对DataFrame数据进行处理时,存在需要对数据内容进行遍历的场景.因此记录一下按照行,列遍历的几种方式. 一.按行遍历 1. 使用loc或iloc方法 loc:表示location,填写内容为行的值或者列表,若填写内容为值,则返回对应行的内容(Series类型):若

  • 利用Pandas求两个dataframe差集的过程详解

    目录 1.交集 2.差集(df1-df2为例) 总结 1.交集 intersected=pd.merge(df1,df2,how='inner') 延伸(针对列求交集)intersected=pd.merge(df1,df2,on['name'],how='inner') 2.差集(df1-df2为例) diff=pd.concat([df1,df2,df2]).drop_duplicates(keep=False) 差集函数的详解: 1.Pandas 通过 concat() 函数能够轻松地将

  • Python  处理 Pandas DataFrame 中的行和列

    目录 处理列 处理行 前言: 数据框是一种二维数据结构,即数据以表格的方式在行和列中对齐.我们可以对行/列执行基本操作,例如选择.删除.添加和重命名.在本文中,我们使用的是nba.csv文件. 处理列 为了处理列,我们对列执行基本操作,例如选择.删除.添加和重命名. 列选择:为了在 Pandas DataFrame 中选择一列,我们可以通过列名调用它们来访问这些列. # Import pandas package import pandas as pd # 定义包含员工数据的字典 data =

  • pandas中字典和dataFrame的相互转换

    目录 一.字典转dataFrame 1.字典转dataFrame比较简单,直接给出示例: 二.dataFrame转字典 1.DataFrame.to_dict() 函数介绍 2.orient =‘dict’ 3. orient =‘list’ 4.orient =‘series’ 5.orient =‘split’ 6.orient =‘records’ 7.orient =‘index’ 8.指定列为key生成字典的实现步骤(按行) 9.指定列为key,value生成字典的实现 总结 一.字典

  • Pandas中如何对DataFrame列名进行重命名

    目录 1.重命名Pandas DataFrame Column(列) 2.在创建Dataframe时指定列名 3.※使用 list 设置全部列名※ 总结 Pandas是一个用于数据分析和操作的Python库.在pandas中几乎所有的操作都围绕着DataFrame.Dataframe是一个二维表的抽象表示,可以包含各种数据. 1.重命名Pandas DataFrame Column(列) 背景:只想重命名几列,最好在创建DataFrame后使用rename方法 使用Dataframe时,列经常被

  • 在pandas中一次性删除dataframe的多个列方法

    之前沉迷于使用index删除,然而发现pandas貌似有bug? import pandas as pd import numpy as np df = pd.DataFrame(np.arange(12).reshape(3,4), columns=['A', 'B', 'C', 'D']) x=[1,2] df.drop(index=[1,2], axis=1, inplace=True) #axis=1,试图指定列,然并卵 print df 输出为 A B C D 0 0 1 2 3 还是

  • Pandas中两个dataframe的交集和差集的示例代码

    创建测试数据: import pandas as pd import numpy as np #Create a DataFrame df1 = { 'Subject':['semester1','semester2','semester3','semester4','semester1', 'semester2','semester3'], 'Score':[62,47,55,74,31,77,85]} df2 = { 'Subject':['semester1','semester2','s

  • Pandas中Series和DataFrame的索引实现

    正文 在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. 使用下标索引的时候下标总是从0开始的,而且索引值总是数字.而使用关键字进行索引,关键字是key里面的值,既可以是数字,也可以是字符串等. Series对象介绍: Series对象是由索引index和值values组成的,一个index对应一个value.其中index是pandas中的Inde

  • pandas通过字典生成dataframe的方法步骤

    1.将一个字典输入: 该字典必须满足:value是一个list类型的元素,且每一个key对应的value长度都相同: (以该字典的key为columns) >>> import pandas as pd >>> a = [1,2,3,4,5] >>> b = ["a","b","c"] >>> c = 1 >>> df = pd.DataFrame({&qu

  • pandas中的DataFrame按指定顺序输出所有列的方法

    问题: 输出新建的DataFrame对象时,DataFrame中各列的显示顺序和DataFrame定义中的顺序不一致. 例如: import pandas as pd grades = [48,99,75,80,42,80,72,68,36,78] df = pd.DataFrame( {'ID': ["x%d" % r for r in range(10)], 'Gender' : ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M', 'M'],

  • Pandas中的unique()和nunique()区别详解

    Pandas中Series和DataFrame的两种数据类型中都有nunique()和unique()方法.这两个方法作用很简单,都是求Series或Pandas中的不同值.而unique()方法返回的是去重之后的不同值,而nunique()方法则直接放回不同值的个数. 具体如下: 如果Series或DataFrame中没有None值,则unique()方法返回的序列数据的长度等于nunique()方法的返回值(如上述代码中所展示的).则当Series或DataFrame中有None值时,这两个

  • python pandas中DataFrame类型数据操作函数的方法

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数据及属性 df_obj = DataFrame() #创建DataFrame对象 df_obj.dtypes #查看各行的数据格式 df_obj['列名'].astype(int)#转换某列的数据类型 df_obj.head() #查看前几行的数据,默认前5行 df_obj.tail() #查看后几

  • 用pandas中的DataFrame时选取行或列的方法

    如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w #选择表格

随机推荐