import pandas as pd
import numpy as np
数据计算
sum mean max min median mode var std quantile
df= pd. DataFrame( np. random. randint( 0 , 100 , size= ( 5 , 3 ) ) ,
columns= [ '数学' , '语文' , '英语' ] )
print ( df)
数学 语文 英语
0 80 9 6
1 90 51 86
2 56 37 68
3 45 38 11
4 53 4 99
df. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 数学 5 non-null int64
1 语文 5 non-null int64
2 英语 5 non-null int64
dtypes: int64(3)
memory usage: 248.0 bytes
df. describe( )
数学 语文 英语 count 5.000000 5.000000 5.000000 mean 64.800000 27.800000 54.000000 std 19.201562 20.290392 43.005814 min 45.000000 4.000000 6.000000 25% 53.000000 9.000000 11.000000 50% 56.000000 37.000000 68.000000 75% 80.000000 38.000000 86.000000 max 90.000000 51.000000 99.000000
df. sum ( )
780
df. sum ( axis= 1 )
0 208
1 148
2 167
3 135
4 122
dtype: int64
df. mean( )
数学 48.6
语文 63.0
英语 44.4
dtype: float64
df. mean( axis= 1 )
0 69.333333
1 49.333333
2 55.666667
3 45.000000
4 40.666667
dtype: float64
df. max ( )
数学 97
语文 90
英语 71
dtype: int64
df. max ( axis= 1 )
0 72
1 90
2 64
3 85
4 97
dtype: int64
df. min ( axis= 0 )
数学 10
语文 11
英语 14
dtype: int64
df. min ( axis= 1 )
0 65
1 10
2 49
3 10
4 11
dtype: int64
df. median( axis= 0 )
数学 54.0
语文 65.0
英语 48.0
dtype: float64
df. median( axis= 1 )
0 71.0
1 48.0
2 54.0
3 40.0
4 14.0
dtype: float64
df. mode( axis= 0 )
数学 语文 英语 0 10.0 11 14 1 NaN 64 40 2 NaN 65 48 3 NaN 85 49 4 NaN 90 71
df. var( )
数学 1474.8
语文 980.5
英语 421.3
dtype: float64
df. var( axis= 1 )
0 14.333333
1 1601.333333
2 58.333333
3 1425.000000
4 2382.333333
dtype: float64
df. std( axis= 0 )
数学 38.403125
语文 31.312937
英语 20.525594
dtype: float64
df. std( axis= 1 )
0 3.785939
1 40.016663
2 7.637626
3 37.749172
4 48.809152
dtype: float64
df. quantile( 0.25 )
数学 10.0
语文 64.0
英语 40.0
Name: 0.25, dtype: float64
df. quantile( 0.25 , axis= 1 )
0 68.0
1 29.0
2 51.5
3 25.0
4 12.5
Name: 0.25, dtype: float64
数据格式化
round
df= pd. DataFrame( np. random. rand( 5 , 3 ) * 100 )
print ( df)
0 1 2
0 90.587048 9.478269 25.541187
1 59.680188 74.363507 56.073898
2 78.204519 46.262737 4.725879
3 25.304191 38.107125 48.068184
4 5.143849 9.547211 77.496162
print ( df. round ( ) )
0 1 2
0 91.0 9.0 26.0
1 60.0 74.0 56.0
2 78.0 46.0 5.0
3 25.0 38.0 48.0
4 5.0 10.0 77.0
print ( df. round ( decimals= 3 ) )
0 1 2
0 90.587 9.478 25.541
1 59.680 74.364 56.074
2 78.205 46.263 4.726
3 25.304 38.107 48.068
4 5.144 9.547 77.496
print ( df. round ( decimals= { 0 : 3 , 1 : 2 , 2 : 1 } ) )
0 1 2
0 90.587 9.48 25.5
1 59.680 74.36 56.1
2 78.205 46.26 4.7
3 25.304 38.11 48.1
4 5.144 9.55 77.5
数据分组统计
groupby
df= pd. read_csv( '../data/JD.csv' , encoding= 'gbk' )
df. head( )
商品名称 一级分类 二级分类 7天点击量 定价 订单预定 0 ASP.NET项目开发实战入门(全彩版) 编程语言与程序设计 ASP.NET 35 69.8 1 1 PHP项目开发实战入门(全彩版) 编程语言与程序设计 PHP 49 69.8 0 2 Java精彩编程200例(全彩版) 编程语言与程序设计 Java 51 79.8 2 3 零基础学PHP(全彩版) 编程语言与程序设计 PHP 64 79.8 1 4 JSP项目开发实战入门(全彩版) 编程语言与程序设计 JSP/JavaWeb 26 69.8 0
set ( df[ '一级分类' ] )
{'数据库', '移动开发', '编程语言与程序设计', '网页制作/Web技术'}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pEsbLAc-1666532083701)(attachment:image.png)]
df. groupby( by= '一级分类' ) . sum ( )
7天点击量 定价 订单预定 一级分类 数据库 186 129.6 15 移动开发 261 358.4 7 编程语言与程序设计 4280 1882.6 192 网页制作/Web技术 345 209.4 15
df. groupby( by= '一级分类' ) . std( )
7天点击量 定价 订单预定 一级分类 数据库 49.497475 21.213203 7.778175 移动开发 25.329495 24.169402 1.707825 编程语言与程序设计 246.767038 17.214249 16.296172 网页制作/Web技术 66.775744 17.320508 4.358899
df. groupby( by= [ '一级分类' , '7天点击量' ] ) . mean( )
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-6aa049e5c147> in <module>
----> 1 df.groupby(by=['一级分类','7天点击量']).mean()
NameError: name 'df' is not defined
df. groupby( by= [ '一级分类' , '二级分类' ] ) . sum ( )
7天点击量 定价 订单预定 一级分类 二级分类 数据库 Oracle 58 79.8 2 SQL 128 49.8 13 移动开发 Android 261 358.4 7 编程语言与程序设计 ASP.NET 87 149.6 2 C# 314 239.4 12 C++/C语言 724 408.8 28 JSP/JavaWeb 157 139.6 1 Java 408 328.4 16 PHP 113 149.6 1 Python 2449 387.4 132 Visual Basic 28 79.8 0 网页制作/Web技术 HTML 188 79.8 8 JavaScript 100 79.8 7 WEB前端 57 49.8 0
数据转换
df= pd. read_excel( '../data/mrbooks.xls' )
df. head( )
买家会员名 买家实际支付金额 宝贝总数量 宝贝标题 订单付款时间 收货地址 0 mr00001 748.50 1 PHP程序员开发资源库 2018-01-01 09:26:18 重庆 重庆市 南岸区 1 mr00003 90.00 1 个人版编程词典加点 2018-01-01 10:06:07 江苏省 苏州市 吴江区 吴江经济技术开发区亨通路 2 mr00004 10.00 1 邮费 2018-01-01 10:06:48 江苏省 苏州市 园区 苏州市工业园区唯亭镇阳澄湖大道维纳阳光花园 3 mr00002 269.00 4 零基础学Java全彩版 ,Java精彩编程200例,Java项目开发实战入门全彩版,明日科技... 2018-01-01 10:18:12 重庆 重庆市 南岸区 长生桥镇茶园新区长电路11112号 4 mr00005 50.86 1 零基础学PHP全彩版 2018-01-01 16:08:22 安徽省 滁州市 明光市 三界镇中心街10001号
result= df[ '收货地址' ] . str . split( ' ' , expand= True )
print ( result. head( ) )
0 1 2 3 4
0 重庆 重庆市 南岸区 None
1 江苏省 苏州市 吴江区 吴江经济技术开发区亨通路 None
2 江苏省 苏州市 园区 苏州市工业园区唯亭镇阳澄湖大道维纳阳光花园 None
3 重庆 重庆市 南岸区 长生桥镇茶园新区长电路11112号 None
4 安徽省 滁州市 明光市 三界镇中心街10001号 None
df[ '省' ] = result[ 0 ]
df[ '市' ] = result[ 1 ]
df[ '区' ] = result[ 2 ]
df. head( )
买家会员名 买家实际支付金额 宝贝总数量 宝贝标题 订单付款时间 收货地址 省 市 区 0 mr00001 748.50 1 PHP程序员开发资源库 2018-01-01 09:26:18 重庆 重庆市 南岸区 重庆 重庆市 南岸区 1 mr00003 90.00 1 个人版编程词典加点 2018-01-01 10:06:07 江苏省 苏州市 吴江区 吴江经济技术开发区亨通路 江苏省 苏州市 吴江区 2 mr00004 10.00 1 邮费 2018-01-01 10:06:48 江苏省 苏州市 园区 苏州市工业园区唯亭镇阳澄湖大道维纳阳光花园 江苏省 苏州市 园区 3 mr00002 269.00 4 零基础学Java全彩版 ,Java精彩编程200例,Java项目开发实战入门全彩版,明日科技... 2018-01-01 10:18:12 重庆 重庆市 南岸区 长生桥镇茶园新区长电路11112号 重庆 重庆市 南岸区 4 mr00005 50.86 1 零基础学PHP全彩版 2018-01-01 16:08:22 安徽省 滁州市 明光市 三界镇中心街10001号 安徽省 滁州市 明光市
数据合并
merge concat
https://zhuanlan.zhihu.com/p/70438557
df1= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 3 ] ) ,
columns= [ '语文' , '数学' , '英语' ] )
df1[ 'people' ] = [ 'p1' , 'p2' , 'p3' ]
df2= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 1 ] ) ,
columns= [ '体育' ] )
df2[ 'people' ] = [ 'p1' , 'p2' , 'p4' ]
print ( df1)
print ( df2)
语文 数学 英语 people
0 33 36 52 p1
1 61 30 40 p2
2 82 41 77 p3
体育 people
0 90 p1
1 17 p2
2 78 p4
df_merge= pd. merge( df1, df2)
print ( df_merge)
语文 数学 英语 people 体育
0 33 36 52 p1 90
1 61 30 40 p2 17
df_merge= pd. merge( df1, df2, how= 'outer' )
print ( df_merge)
语文 数学 英语 people 体育
0 33.0 36.0 52.0 p1 90.0
1 61.0 30.0 40.0 p2 17.0
2 82.0 41.0 77.0 p3 NaN
3 NaN NaN NaN p4 78.0
df_merge= pd. merge( df1, df2, how= 'left' )
print ( df_merge)
语文 数学 英语 people 体育
0 33 36 52 p1 90.0
1 61 30 40 p2 17.0
2 82 41 77 p3 NaN
df_merge= pd. merge( df1, df2, how= 'right' )
print ( df_merge)
语文 数学 英语 people 体育
0 33.0 36.0 52.0 p1 90
1 61.0 30.0 40.0 p2 17
2 NaN NaN NaN p4 78
df1= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 3 ] ) ,
columns= [ '语文' , '数学' , '英语' ] )
df1[ 'people1' ] = [ 'p1' , 'p2' , 'p3' ]
df2= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 1 ] ) ,
columns= [ '体育' ] )
df2[ 'people2' ] = [ 'p1' , 'p2' , 'p4' ]
print ( df1)
print ( df2)
语文 数学 英语 people1
0 76 8 45 p1
1 20 24 25 p2
2 37 86 73 p3
体育 people2
0 93 p1
1 7 p2
2 68 p4
df_merge= pd. merge( df1, df2, left_on= 'people1' , right_on= 'people2' )
print ( df_merge)
语文 数学 英语 people1 体育 people2
0 76 8 45 p1 93 p1
1 20 24 25 p2 7 p2
df1= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 3 ] ) ,
index= [ 'p1' , 'p2' , 'p3' ] ,
columns= [ '语文' , '数学' , '英语' ] )
df2= pd. DataFrame( data= np. random. randint( 0 , 100 , size= [ 3 , 1 ] ) ,
index= [ 'p1' , 'p2' , 'p4' ] ,
columns= [ '体育' ] )
print ( df1)
print ( df2)
语文 数学 英语
p1 14 31 41
p2 71 88 60
p3 10 12 39
体育
p1 80
p2 23
p4 82
df_merge= pd. merge( df1, df2, left_index= True , right_index= True , how= 'outer' )
print ( df_merge)
语文 数学 英语 体育
p1 14.0 31.0 41.0 80.0
p2 71.0 88.0 60.0 23.0
p3 10.0 12.0 39.0 NaN
p4 NaN NaN NaN 82.0
数据导出
df= pd. DataFrame( np. random. randint( 0 , 100 , size= ( 5 , 3 ) ) ,
columns= [ '数学' , '语文' , '英语' ] )
print ( df)
数学 语文 英语
0 65 58 71
1 19 59 40
2 47 32 64
3 67 95 14
4 77 17 12
df. to_excel( 'data.xls' , sheet_name= 'excel' , index= False )
df. to_csv( 'data.csv' , index= False , encoding= 'gbk' )