Python 常用方法(1) -DataFrame转dictionary,dictionary转tuple,sorted对iterable对象排序

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,并采用降序的方式。

今天的分享就到这里,如果感觉对你帮助,请点个赞吧~

猜你喜欢

转载自blog.csdn.net/dylan_young/article/details/111687167