将DataFrame映射成字典形式
在我们日常工作学习中难免遇到将DataFrame映射成字典的时候,下面就让我们来看看怎么操作。
假设我们现在有一些学生的数据,其中有姓名,年纪,专业信息。
import pandas as pd
data ={
'name':['Tom','Jarry','Marry','Ali'],
'age':[18,20,21,21],
'major':['Math','English','Physics','Math']
}
df1 = pd.DataFrame(data)
print(df1)
name age major
0 Tom 18 Math
1 Jarry 20 English
2 Marry 21 Physics
3 Ali 21 Math
将每条记录转化为字典格式
现在我们想把他转换成字典格式的数据储存,把每一行的数据拿出来,每个学生的信息单独存储为一个字典,可以采用pandas自带df.to_dict(‘records’)
效果如下
data_dict = df1.to_dict(orient='records')
print(data_dict)
[{'name': 'Tom', 'age': 18, 'major': 'Math'}, {'name': 'Jarry', 'age': 20, 'major': 'English'}, {'name': 'Marry', 'age': 21, 'major': 'Physics'}, {'name': 'Ali', 'age': 21, 'major': 'Math'}]
每个学生的信息都被取了出来,并以一个字典格式保存。
将dataframe中特定两列以字典格式保存
现在我们只想要学生的姓名和专业,并且以 姓名-专业的字典形式保存。
先将想要转化成字典的两列信息取出来,并且将姓名作为索引。
data_dict =df1[["name", "major"]].set_index("name")
print(data_dict)
major
name
Tom Math
Jarry English
Marry Physics
Ali Math
将其转化为字典格式
data_dict =df1[["name", "major"]].set_index("name").to_dict()
print(data_dict)
{'major': {'Tom': 'Math', 'Jarry': 'English', 'Marry': 'Physics', 'Ali': 'Math'}}
形成的是一个嵌套字典,通过键major,取出我们想要的信息。
data_dict =df1[["name", "major"]].set_index("name").to_dict()['major']
print(data_dict)
{'Tom': 'Math', 'Jarry': 'English', 'Marry': 'Physics', 'Ali': 'Math'}
如果我们想要查看选修每个专业的都有哪个学生的时候,以major作为索引。
data_dict =df1[["name", "major"]].set_index("major").to_dict()['name']
print(data_dict)
{'Math': 'Ali', 'English': 'Jarry', 'Physics': 'Marry'}
查看数学专业却发现只有ALi一个同学,那么这是为什么呢?
data_dict =df1[["name", "major"]].set_index("major")
print(data_dict)
data_dict =df1[["name", "major"]].set_index("major").to_dict()['name']
print(data_dict)
name
major
Math Tom
English Jarry
Physics Marry
Math Ali
{'Math': 'Ali', 'English': 'Jarry', 'Physics': 'Marry'}
将major作为索引后形成的dataframe中,可以看到数学专业的有两名同学,但是再形成字典时,在形成math-Tom键值对之后,遇到Math-Ali这一行时,因为键是相同的,那么默认为对math键相应的值进行修改。
那么如果想要获得数学专业的同学时应该怎么做呢?
这时我们可以用到pandas中的groupby函数,对datafram进行分组,在分组之后再进行聚合。
df2 = df1.groupby('major')
for name, group in df2:
print(name)
print(group)
English
name age major
1 Jarry 20 English
Math
name age major
0 Tom 18 Math
3 Ali 21 Math
Physics
name age major
2 Marry 21 Physics
可以看到通过分组函数,我们将学生按照专业进行了分组。为了整合每个专业的学生名单还需要对其进行聚合。我们将每个专业的学生姓名转化为列表形式,最后再转为字典格式,从而达到目的。
df2 =df2['name'].apply(lambda x:x.tolist())
print(df2)
print(df2.to_dict())
major
English [Jarry]
Math [Tom, Ali]
Physics [Marry]
Name: name, dtype: object
{'English': ['Jarry'], 'Math': ['Tom', 'Ali'], 'Physics': ['Marry']}
Original: https://blog.csdn.net/George_RED/article/details/114920289
Author: George_RED
Title: 将DataFrame中每条记录以字典表示和将其指定两列转成字典
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754560/
转载文章受原作者版权保护。转载请注明原作者出处!