Python 常用方法(1) -DataFrame转dictionary,dictionary转tuple,sorted对iterable对象排序
本文主要介绍三个常用的python方法,主要应用于 Financial Analyst.
方法一:由pandas.DataFrame 类型转化为 dictionary 类型
基本公式:pd.DataFrame.to_dict(self, orient=‘dict’, into=<class ‘dict’>)
常见可替换参数及得到结果形式:
对orient的替换:
-‘dict’ (default) : dict like {column -> {index -> value}}
-‘list’ : dict like {column -> [values]}
-‘series’ : dict like {column -> Series(values)}
-‘split’ : dict like
{‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}
-‘records’ : list like
[{column -> value}, … , {column -> value}]
-‘index’ : dict like {index -> {column -> value}}
这里简单介绍两个常用的orient替换:-‘dict’和 -‘list’ 。
应用1.1 orient替换为’dict’
代码如下:
我们先设定一个4行3列的dataframe对象,并分别命名index和column
import numpy as np
import pandas as pd
df = pd.DataFrame([[10,20,24],[20,40,36],[30,50,72],[70,90,90],],
index = ['a','b','c','d'], columns = ['number','post','id'])
print(df)
得到如下结果:
number post id
a 10 20 24
b 20 40 36
c 30 50 72
d 70 90 90
接下来我们把dataframe对象应用to_dict()方法看看会得到什么,
a = df.to_dict()
print(a)
得到如下结果,
{
'number': {
'a': 10, 'b': 20, 'c': 30, 'd': 70},
'post': {
'a': 20, 'b': 40, 'c': 50, 'd': 90},
'id': {
'a': 24, 'b': 36, 'c': 72, 'd': 90}}
我们成功的将dataframe类型转化为dict类型,把dataframe的column转为dict的一级key,index转化为dict的二级key,表中数据转化为二级key对应的value,接下来,我们可以利用dict的内置方法对得到的dict做简单的处理。比如我们想得到column为“number” index为“a” 的数值,我们就可以采用如下代码实现:
print(a['number']['a'])
得到如下结果,
10
接下来我们尝试第二种方法。
应用1.1 orient替换为’list’
代码如下:
b = df.to_dict('list')
print(b)
得到结果,
{
'number': [10, 20, 30, 70],
'post': [20, 40, 50, 90],
'id': [24, 36, 72, 90]}
我们发现,依然是以column作为一级key,但index被省略了,表中数据直接作为一级key的value,并以list形式返回,这也就是为什么参数叫list。
同样,我们对这个list做一下简单应用,也是取出column为“number”,但这会是index为0的数据。代码如下,
print(b['number'][0])
结果如下,
10
以上就是我们的第一种方法;接下来介绍第二种方法。
方法二:把dictionary 类型的对象的每个一级key和对应的value分开,组成一个tuple,再把tuple组合成list形式。然后把list中每个tuple进行遍历分离,取出每列数据,表现形式为[(index,value),(index,value)…]。
基本公式:dict.items()
应用2.1 延续应用一创建的dataframe对转化成复合dict类型的a变量进行一级key和对应value的tuple化,并组建新list。
代码如下,
print(a.items())
结果如下,
dict_items([('number', {
'a': 10, 'b': 20, 'c': 30, 'd': 70}),
('post', {
'a': 20, 'b': 40, 'c': 50, 'd': 90}),
('id', {
'a': 24, 'b': 36, 'c': 72, 'd': 90})])
我们进行第二步,采取遍历的方法,把一级key和value分离后每个tuple中的一级key去掉(即column去掉),同时,把二级key和对应的value进行分离组成tuple写进list。
代码如下,
for i,l in a.items():
c =list(l.items())
print(c)
结果如下,
[('a', 10), ('b', 20), ('c', 30), ('d', 70)]
[('a', 20), ('b', 40), ('c', 50), ('d', 90)]
[('a', 24), ('b', 36), ('c', 72), ('d', 90)]
接下来是最后一个常用方法,sorted()
方法三:把iterated 对象进行自定义(自定义排序“参考列”)排序。
基本公式: sorted(iterate object,key =lambda x:x[1],reverse)
常见可替换参数及得到结果形式:
对key和reverse的替换及结果:
返回一个新list,默认为元素升序。但可以用key自定义的排序”参考列“;如果reverse = True 则为降序。
应用三:延续应用二,对得到的每列的以[(index,value),(index,value)…] 得到的list根据value值进行 每列的降序排序。
代码如下,
for i,l in a.items():
c =list(l.items())
print(c)
d = sorted(c,key =lambda x:x[1],reverse = True)
print(d)
结果如下,
[('a', 10), ('b', 20), ('c', 30), ('d', 70)]
[('d', 70), ('c', 30), ('b', 20), ('a', 10)]
[('a', 20), ('b', 40), ('c', 50), ('d', 90)]
[('d', 90), ('c', 50), ('b', 40), ('a', 20)]
[('a', 24), ('b', 36), ('c', 72), ('d', 90)]
[('d', 90), ('c', 72), ('b', 36), ('a', 24)]
通过对比,我们很清楚的看到对每列的排序参考列设定为 每列的value,并采用降序的方式。
今天的分享就到这里,如果感觉对你帮助,请点个赞吧~