在数据处理以后需要对数据进行格式化,以增加数据的可读性。
设置小数位数主要使用round函数实现四舍五入,decimals参数用于设置保留小数的位数。
round(decimals=0, *args, **kwargs)
- decimals:每一列四舍五入的小数位数,整型、字典或Series对象。如果是整数,则将每一列四舍五入到相同的位置。否则,将字典和Series舍入到可变数目的位置;小数是类似于字典的,那么列名应该在键中;如果小数是级数,列名应该在索引中。没有包含在小数中的任何列都将保持原样。非输入列的小数元素将被忽略。
- *args:附加的关键字参数
- **kwargs:附加的关键字参数
- 返回值:返回DataFrame对象。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([5,5]),
columns = ['A1','A2','A3','A4','A5'])
print(df.round(2))#保留小数点后两位
#A1列保留小数点后一位,A2列保留两位
print(df.round({'A1':1,'A2':2}))
s1 =pd.Series([1,0,2],index = ['A1','A2','A3'])
#设置Series对象小数位数
print(df.round(s1))
A1 A2 A3 A4 A5
0 0.85 0.95 0.39 0.18 0.09
1 0.75 0.06 0.89 0.61 0.77
2 0.55 0.19 0.90 0.16 0.91
3 0.95 0.87 0.44 0.30 0.14
4 0.82 0.82 0.61 0.58 0.80
A1 A2 A3 A4 A5
0 0.8 0.95 0.386624 0.177894 0.085553
1 0.7 0.06 0.891726 0.607675 0.767936
2 0.5 0.19 0.904267 0.156154 0.910458
3 0.9 0.87 0.437880 0.295522 0.138203
4 0.8 0.82 0.614968 0.579653 0.802364
A1 A2 A3 A4 A5
0 0.8 1.0 0.39 0.177894 0.085553
1 0.7 0.0 0.89 0.607675 0.767936
2 0.5 0.0 0.90 0.156154 0.910458
3 0.9 1.0 0.44 0.295522 0.138203
4 0.8 1.0 0.61 0.579653 0.802364
#保留小数位也可以用自定义函数
df.applymap(lambda x:'%.2f'%x)
notice:经过自定义函数处理过的数据不再是浮点型,而是对象型,后续计算需要数据,则应先进行类型转换。
设置百分比可以使用apply()函数和format函数设置百分比,将浮点型小数转换成待指定小数位数的百分比数据。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random([5,5]),
columns = ['A1','A2','A3','A4','A5'])
#整列保留0位小数
df['百分比']= df['A1'].apply(lambda x:format(x,'.0%'))
print(df)
#整列保留两位小数
df['百分比'] = df['A1'].apply(lambda x:format(x,'.2%'))
print(df)
#使用map函数整列保留0位小数
df['百分比'] = df['A1'].map(lambda x:'{:.0%}'.format(x))
print(df)
A1 A2 A3 A4 A5 百分比
0 0.757924 0.554116 0.289314 0.405738 0.971056 76%
1 0.381371 0.231832 0.960639 0.567997 0.957563 38%
2 0.533128 0.041719 0.780189 0.904583 0.803020 53%
3 0.590224 0.514953 0.322249 0.720569 0.839565 59%
4 0.400369 0.928340 0.116352 0.329837 0.894554 40%
A1 A2 A3 A4 A5 百分比
0 0.757924 0.554116 0.289314 0.405738 0.971056 75.79%
1 0.381371 0.231832 0.960639 0.567997 0.957563 38.14%
2 0.533128 0.041719 0.780189 0.904583 0.803020 53.31%
3 0.590224 0.514953 0.322249 0.720569 0.839565 59.02%
4 0.400369 0.928340 0.116352 0.329837 0.894554 40.04%
A1 A2 A3 A4 A5 百分比
0 0.757924 0.554116 0.289314 0.405738 0.971056 76%
1 0.381371 0.231832 0.960639 0.567997 0.957563 38%
2 0.533128 0.041719 0.780189 0.904583 0.803020 53%
3 0.590224 0.514953 0.322249 0.720569 0.839565 59%
4 0.400369 0.928340 0.116352 0.329837 0.894554 40%
设置千分位分隔符
有时需要将数据格式化为带千分位分隔符的数据,处理后的数据不再是浮点型,而是对象型。
import pandas as pd
data = [['a','1',4564789456],['b','2',6879451365]]
df = pd.DataFrame(data = data)
df[2] = df[2].apply(lambda x:format(int(x),','))
print(df)
0 1 2
0 a 1 4,564,789,456
1 b 2 6,879,451,365
数据分组统计
主要使用groupby进行分组
分组统计groupby函数对数据进行分组统计,主要是用DataFrame中的groupby函数,主要功能为:
- 根据给定的条件将数据拆分成组
- 每个组都可以独立应用函数(如sum、mean等)
- 将结果合并到一个数据结构中。
groupby函数用于将数据按照一列或多列进行分组,一般与计算函数结合使用,从而对数据进行分组。
groupby(by=None, axis=0, level=None, as_index: 'bool' = True, sort: 'bool' = True, group_keys: 'bool' = True, squeeze: 'bool' =
参数说明:
- by:映射、字典或Series对象、数组、标签或标签列表。如果by是函数,则对象索引的每个值 都调用这个函数;如果是字典或Series对象,则使用该字典或seri对象值进行分组;如果是ndarray,则按原样使用这些值来确定组。
- axis:axis = 1表示行,axis = 0表示列,默认为0.
- level:表示索引层级,默认为None
- as_index:布尔型,默认为True,返回以组标签为索引的对象
- sort:对组进行排序,布尔型,默认是True
- group_keys:布尔型,默认值为True,调用apply函数时,将分组的键添加到索引以标识片段
- squeeze:布尔型,默认值为false。如果可能,减少返回类型的维度,否则返回一致类型。
- 返回值:返回DataFramegroupby,返回包含有关组的信息的groupby对象。
import pandas as pd
df = pd.read_csv('MR/Code/04/15/JD.csv',encoding= 'gbk')
#抽取数据
df1 = df[['一级分类','7天点击量','订单预定']]
#分组统计求和
df1.groupby('一级分类').sum()
7天点击量 | 订单预定 | |
---|---|---|
一级分类 | ||
数据库 | 186 | 15 |
移动开发 | 261 | 7 |
编程语言与程序设计 | 4280 | 192 |
网页制作/Web技术 | 345 | 15 |
import pandas as pd
df = pd.read_csv('MR/Code/04/15/JD.csv',encoding= 'gbk')
#抽取数据
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
#分组统计求和
df1.groupby(['一级分类','二级分类']).sum()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1WuFFfr-1650631191621)(C:\Users\85289\AppData\Roaming\Typora\typora-user-images\image-20220419174638908.png)]
分组并按指定列进行数据计算import pandas as pd
df = pd.read_csv('MR/Code/04/15/JD.csv',encoding= 'gbk')
#抽取数据
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
#分组统计求和
df1.groupby('二级分类')['7天点击量'].sum()
二级分类
ASP.NET 87
Android 261
C# 314
C++/C语言 724
HTML 188
JSP/JavaWeb 157
Java 408
JavaScript 100
Oracle 58
PHP 113
Python 2449
SQL 128
Visual Basic 28
WEB前端 57
Name: 7天点击量, dtype: int64
对分组数据进行迭代
通过for循环对分组统计数据进行迭代(遍历分组数据)
#抽取数据
df = pd.read_csv('MR/Code/04/15/JD.csv',encoding= 'gbk')
df1 = df[['一级分类','7天点击量','订单预定']]
for name,group in df1.groupby('一级分类'):
print(name)
print(group)
数据库
一级分类 7天点击量 订单预定
25 数据库 58 2
27 数据库 128 13
移动开发
一级分类 7天点击量 订单预定
10 移动开发 85 4
19 移动开发 32 1
24 移动开发 85 2
28 移动开发 59 0
编程语言与程序设计
一级分类 7天点击量 订单预定
0 编程语言与程序设计 35 1
1 编程语言与程序设计 49 0
2 编程语言与程序设计 51 2
3 编程语言与程序设计 64 1
4 编程语言与程序设计 26 0
5 编程语言与程序设计 60 1
6 编程语言与程序设计 227 11
8 编程语言与程序设计 122 3
9 编程语言与程序设计 111 5
11 编程语言与程序设计 165 5
12 编程语言与程序设计 131 1
13 编程语言与程序设计 149 10
15 编程语言与程序设计 1139 79
16 编程语言与程序设计 125 1
18 编程语言与程序设计 149 4
20 编程语言与程序设计 52 1
21 编程语言与程序设计 597 25
22 编程语言与程序设计 474 15
23 编程语言与程序设计 83 3
26 编程语言与程序设计 132 8
29 编程语言与程序设计 27 2
30 编程语言与程序设计 239 13
31 编程语言与程序设计 45 1
32 编程语言与程序设计 28 0
网页制作/Web技术
一级分类 7天点击量 订单预定
7 网页制作/Web技术 100 7
14 网页制作/Web技术 188 8
17 网页制作/Web技术 57 0
notice:name是groupby函数中’一级分类‘的值,group是分组后的数据。如果groupby函数对多列进行分组,那么需要在for循环中指定多列。
迭代两级分类的订单数据#抽取数据
df = pd.read_csv('MR/Code/04/15/JD.csv',encoding= 'gbk')
df2 = df[['一级分类','二级分类','7天点击量','订单预定']]
for (key1,key2),group in df2.groupby(['一级分类','二级分类']):
print(key1,key2)
print(group)
数据库 Oracle
一级分类 二级分类 7天点击量 订单预定
25 数据库 Oracle 58 2
数据库 SQL
一级分类 二级分类 7天点击量 订单预定
27 数据库 SQL 128 13
移动开发 Android
一级分类 二级分类 7天点击量 订单预定
10 移动开发 Android 85 4
19 移动开发 Android 32 1
24 移动开发 Android 85 2
28 移动开发 Android 59 0
编程语言与程序设计 ASP.NET
一级分类 二级分类 7天点击量 订单预定
0 编程语言与程序设计 ASP.NET 35 1
20 编程语言与程序设计 ASP.NET 52 1
编程语言与程序设计 C#
一级分类 二级分类 7天点击量 订单预定
5 编程语言与程序设计 C# 60 1
8 编程语言与程序设计 C# 122 3
26 编程语言与程序设计 C# 132 8
编程语言与程序设计 C++/C语言
一级分类 二级分类 7天点击量 订单预定
6 编程语言与程序设计 C++/C语言 227 11
9 编程语言与程序设计 C++/C语言 111 5
11 编程语言与程序设计 C++/C语言 165 5
18 编程语言与程序设计 C++/C语言 149 4
29 编程语言与程序设计 C++/C语言 27 2
31 编程语言与程序设计 C++/C语言 45 1
编程语言与程序设计 JSP/JavaWeb
一级分类 二级分类 7天点击量 订单预定
4 编程语言与程序设计 JSP/JavaWeb 26 0
12 编程语言与程序设计 JSP/JavaWeb 131 1
编程语言与程序设计 Java
一级分类 二级分类 7天点击量 订单预定
2 编程语言与程序设计 Java 51 2
13 编程语言与程序设计 Java 149 10
16 编程语言与程序设计 Java 125 1
23 编程语言与程序设计 Java 83 3
编程语言与程序设计 PHP
一级分类 二级分类 7天点击量 订单预定
1 编程语言与程序设计 PHP 49 0
3 编程语言与程序设计 PHP 64 1
编程语言与程序设计 Python
一级分类 二级分类 7天点击量 订单预定
15 编程语言与程序设计 Python 1139 79
21 编程语言与程序设计 Python 597 25
22 编程语言与程序设计 Python 474 15
30 编程语言与程序设计 Python 239 13
编程语言与程序设计 Visual Basic
一级分类 二级分类 7天点击量 订单预定
32 编程语言与程序设计 Visual Basic 28 0
网页制作/Web技术 HTML
一级分类 二级分类 7天点击量 订单预定
14 网页制作/Web技术 HTML 188 8
网页制作/Web技术 JavaScript
一级分类 二级分类 7天点击量 订单预定
7 网页制作/Web技术 JavaScript 100 7
网页制作/Web技术 WEB前端
一级分类 二级分类 7天点击量 订单预定
17 网页制作/Web技术 WEB前端 57 0
对分组的某列或多列使用聚合函数(agg函数)
python也可以实现像sql中的分组聚合运算 *** 作,主要通过groupby函数和agg函数。
print(df1.groupby('一级分类').agg(['mean','sum']))
7天点击量 订单预定
mean sum mean sum
一级分类
数据库 93.000000 186 7.50 15
移动开发 65.250000 261 1.75 7
编程语言与程序设计 178.333333 4280 8.00 192
网页制作/Web技术 115.000000 345 5.00 15
针对不同的列使用不同聚合函数
print(df1.groupby('一级分类').agg({'7天点击量':['mean','sum'],
'订单预定':['sum']}))
7天点击量 订单预定
mean sum sum
一级分类
数据库 93.000000 186 15
移动开发 65.250000 261 7
编程语言与程序设计 178.333333 4280 192
网页制作/Web技术 115.000000 345 15
通过自定义函数来分组统计
df = pd.read_excel('MR/Code/04/22/1月.xlsx')#导入excel文件
#x是“宝贝标题 ”对应的列
#value_count()函数用于Series对象中的每个值进行计数并且排序
pd.set_option('display.unicode.east_asian_width',True)
max1 = lambda x:x.value_counts(dropna = False).index[0]
df1 = df.agg({'宝贝标题':[max1],
'数量':['sum','mean'],
'买家实际支付金额':['sum','mean']})
print(df1)
宝贝标题 数量 买家实际支付金额
零基础学Python NaN NaN
sum NaN 53.00 2528.5600
mean NaN 1.06 50.5712
可以通过设置max1.__name__ = '购买次数最多'解决
通过字典和Series对象进行分组统计
通过字典简历对应关系,然后将字典传递给groupby函数即可实现数据分组统计
df = pd.read_csv('MR/Code/04/23/JD.csv',encoding='gbk')
df = df.set_index(['商品名称'])
dict1 = {'北京出库销量':'北上广','上海出库销量':'北上广',
'广州出库销量':'北上广','成都出库销量':'成都',
'武汉出库销量':'武汉','西安出库销量':'西安'}
df1 = df.groupby(dict1,axis = 1).sum()
print(df1)
北上广 成都 武汉 西安
商品名称
零基础学Python(全彩版) 1991 284 246 152
Python从入门到项目实践(全彩版) 798 113 92 63
Python项目开发案例集锦(全彩版) 640 115 88 57
Python编程锦囊(全彩版) 457 85 65 47
零基础学C语言(全彩版) 364 82 63 40
SQL即查即用(全彩版) 305 29 25 40
零基础学Java(全彩版) 238 48 43 29
零基础学C++(全彩版) 223 53 35 23
零基础学C#(全彩版) 146 27 16 7
C#项目开发实战入门(全彩版) 135 18 22 12
通过Series对象进行分组统计与字典方法类似。
data = {'北京出库销量':'北上广','上海出库销量':'北上广',
'广州出库销量':'北上广','成都出库销量':'成都',
'武汉出库销量':'武汉','西安出库销量':'西安'}
s1 = pd.Series(data)
print(s1)
df1 = df.groupby(s1,axis=1).sum()
print(df1)
北京出库销量 北上广
上海出库销量 北上广
广州出库销量 北上广
成都出库销量 成都
武汉出库销量 武汉
西安出库销量 西安
dtype: object
北上广 成都 武汉 西安
商品名称
零基础学Python(全彩版) 1991 284 246 152
Python从入门到项目实践(全彩版) 798 113 92 63
Python项目开发案例集锦(全彩版) 640 115 88 57
Python编程锦囊(全彩版) 457 85 65 47
零基础学C语言(全彩版) 364 82 63 40
SQL即查即用(全彩版) 305 29 25 40
零基础学Java(全彩版) 238 48 43 29
零基础学C++(全彩版) 223 53 35 23
零基础学C#(全彩版) 146 27 16 7
C#项目开发实战入门(全彩版) 135 18 22 12
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)