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()
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)
in
----> 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')