Python学习笔记(四.pandas模块进阶,数据的高级处理)

系列文章持续更新中…

前言

通过上一篇文章我们对pandas模块有了简单了解,这篇我们对pandas模块进行进阶强化学习,并做一个简单的实战演练。
text3:
在这里插入图片描述

一、数据的查找和替换

A.isin()函数查找数据

通过isin()函数可以查看数据表中是否包含单个值或多个值;
还可以判断数据表的某列是否含有某个值。
(被查找的数据会被标记为True)

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data1 = data.isin([3,‘钢笔b’])#查看是否包含序号3和钢笔b
data2 = data[‘产品’].isin([‘书包’])#查看‘产品’列中是否包含书包
print(data)
print(data1)
print(data2)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 8.0 10 4 32 40 8
序号 产品 进价 售价 数量 成本 收入 利润
0 False False False False False False False False
1 False False False False False False False False
2 True True False False False False False False
3 False False False False False False False False
4 False False False False False False False False
0 False
1 False
2 False
3 True
4 False
Name: 产品, dtype: bool

B.替换数据

通过replace()函数可以完成数据表中的数据一对一、多对一以及多对多替换。

a.一对一替换

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data.replace(‘书包’,‘挎包’,inplace=True)#将书包替换为挎包
print(data)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10
3 4 挎包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20

b.多对一替换

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data.replace([‘书包’,‘笔袋’],‘挎包’,inplace=True)#将‘书包’和‘笔袋’替换为‘挎包’
print(data)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10
3 4 挎包 50.0 60 2 100 120 20
4 5 挎包 10.0 15 4 40 60 20

c.多对多替换

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data.replace({‘书包’:‘挎包’,60:70,120:140},inplace=True)#可以看做多个一对一替换
print(data)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10
3 4 挎包 50.0 70 2 100 140 20
4 5 笔袋 10.0 15 4 40 70 20

二、数据的处理

A.插入数据

插入数据在pandas模块里是指插入一列新的数据,常用方法有两种:

1.通过赋值在数据表最右侧插入列数据;
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data[‘品牌’] = [‘A’,‘B’,‘C’,‘D’,‘E’]#插入品牌列
print(data)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 品牌
0 1 钢笔a 10.0 15 5 50 75 25 A
1 2 铅笔 0.5 1 20 10 10 10 B
2 3 钢笔b 15.0 20 2 30 40 10 C
3 4 书包 50.0 60 2 100 120 20 D
4 5 笔袋 10.0 15 4 40 60 20 E

2.通过insert()函数在数据表的指定位置插入列数据。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data.insert(2,‘品牌’, [‘A’,‘B’,‘C’,‘D’,‘E’])#在序号为2的列的位置插入品牌列
print(data)

运行结果:
序号 产品 品牌 进价 售价 数量 成本 收入 利润
0 1 钢笔a A 10.0 15 5 50 75 25
1 2 铅笔 B 0.5 1 20 10 10 10
2 3 钢笔b C 15.0 20 2 30 40 10
3 4 书包 D 50.0 60 2 100 120 20
4 5 笔袋 E 10.0 15 4 40 60 20

B.删除数据

通过使用drop()函数可以删除指定的行或列。

a.删除列

直接在drop()函数中给出要删除的列标签。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop([‘进价’,‘成本’],axis=1)#axis=1表示按列删除,axis=0表示按行删除
print(a)

运行结果:
序号 产品 售价 数量 收入 利润
0 1 钢笔a 15 5 75 25
1 2 铅笔 1 20 10 10
2 3 钢笔b 20 2 40 10
3 4 书包 60 2 120 20
4 5 笔袋 15 4 60 20

通过列序号来获取列标签,作为drop()函数的第一个参数使用,再删除指定的列。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop(data.columns[[2,5]],axis=1)#删除列序号为2和5的列
print(a)

运行结果:
序号 产品 售价 数量 收入 利润
0 1 钢笔a 15 5 75 25
1 2 铅笔 1 20 10 10
2 3 钢笔b 20 2 40 10
3 4 书包 60 2 120 20
4 5 笔袋 15 4 60 20

将列标签以列表的形式传递给drop()函数的参数columns来删除列
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop(columns=[‘进价’,‘成本’])#删除进价和成本列
print(a)

运行结果:
序号 产品 售价 数量 收入 利润
0 1 钢笔a 15 5 75 25
1 2 铅笔 1 20 10 10
2 3 钢笔b 20 2 40 10
3 4 书包 60 2 120 20
4 5 笔袋 15 4 60 20

b.删除行

同理,删除行只要将参数axis=0。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’,index_col=0)#演示文档
a = data.drop([0,1],axis=0)#删除列序号为0和1的行
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
2 3 钢笔b 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20

同理,通过行序号来获取行标签,作为drop()函数的第一个参数使用,再删除指定的行。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’,index_col=0)#演示文档
a = data.drop(data.index[[0,1]],axis=0)#删除行序号为0和1的行
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
2 3 钢笔b 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20

将行标签以列表的形式传递给drop()函数的参数index来删除行。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’,index_col=0)#演示文档
a = data.drop(index=[1,2])#删除第1和2的行
print(a)

运行结果:
产品 进价 售价 数量 成本 收入 利润
序号
3 钢笔b 15.0 20 2 30 40 10
4 书包 50.0 60 2 100 120 20
5 笔袋 10.0 15 4 40 60 20

C.处理缺失值

在python中缺失值一般用NaN表示。

a.查看缺失值

查看每一列的缺失情况,可以用pandas模块里的info()函数。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
print(data)
data.info()

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20
<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 5 entries, 0 to 4
Data columns (total 8 columns):

Column Non-Null Count Dtype


0 序号 5 non-null int64
1 产品 5 non-null object
2 进价 5 non-null float64
3 售价 5 non-null int64
4 数量 5 non-null int64
5 成本 5 non-null int64
6 收入 5 non-null int64
7 利润 5 non-null int64
dtypes: float64(1), int64(6), object(1)
memory usage: 448.0+ bytes

eg:
我们把text3中挖一个缺失值,缺失值被标记为True。
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.isnull()#使用isnull()函数判断数据表中的那个是缺失值,缺失值被标记为True
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 False False False False False False False False
1 False False False True False False False False
2 False False False False False False False False
3 False False False False False False False False
4 False False False False False False False False

b.删除缺失值

使用dropna()函数删除数据表中含有缺失值的行。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.dropna()
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10.0 15.0 5 50 75 25
2 3 钢笔b 15.0 20.0 2 30 40 10
3 4 书包 50.0 60.0 2 100 120 20
4 5 笔袋 10.0 15.0 4 40 60 20

将dropna()函数参数how设置为’all’,可以删除整行都为缺失值的行。

eg:
这里我们将text3铅笔行全部挖空。
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.dropna(how=‘all’)
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1.0 钢笔a 10.0 15.0 5.0 50.0 75.0 25.0
2 3.0 钢笔b 15.0 20.0 2.0 30.0 40.0 10.0
3 4.0 书包 50.0 60.0 2.0 100.0 120.0 20.0
4 5.0 笔袋 10.0 15.0 4.0 40.0 60.0 20.0

c.填充缺失值

使用fillna()函数可以将数据表中所有缺失值填充为指定的值。

eg:
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.fillna(0)#将所有缺失值填充为0
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1.0 钢笔a 10.0 15.0 5.0 50.0 75.0 25.0
1 0.0 0 0.0 0.0 0.0 0.0 0.0 0.0
2 3.0 钢笔b 15.0 20.0 2.0 30.0 40.0 10.0
3 4.0 书包 50.0 60.0 2.0 100.0 120.0 20.0
4 5.0 笔袋 10.0 15.0 4.0 40.0 60.0 20.0

还可以使用fillna()函数添加一个字典,为不同列中的缺失值填充不同的值。
eg:
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.fillna({‘序号’:2,‘产品’:‘铅笔’,‘进价’:0.5,‘售价’:1,‘数量’:20,‘成本’:10,‘收入’:10,‘利润’:10})
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1.0 钢笔a 10.0 15.0 5.0 50.0 75.0 25.0
1 2.0 铅笔 0.5 1.0 20.0 10.0 10.0 10.0
2 3.0 钢笔b 15.0 20.0 2.0 30.0 40.0 10.0
3 4.0 书包 50.0 60.0 2.0 100.0 120.0 20.0
4 5.0 笔袋 10.0 15.0 4.0 40.0 60.0 20.0

D.处理重复值

a.删除重复行

使用drop_duplicates()函数可以删除重复行
eg:
这里我们把text3钢笔b行复制粘贴到铅笔行。
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop_duplicates()
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔a 10 15 5 50 75 25
1 3 钢笔b 15 20 2 30 40 10
3 4 书包 50 60 2 100 120 20
4 5 笔袋 10 15 4 40 60 20

b.删除某一列中的重复值

使用drop_duplicates()函数添加参数subdet可以删除某一列中的重复值。
eg:
这里我们把text3里钢笔后的a,b去掉。
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop_duplicates(subset=‘产品’)#删除产品列里的重复值
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1 钢笔 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20

我们看到默认保留的是原来钢笔a的数据,可以使用drop_duplicates()函数添加参数keep自定义删除重复值时保留那个重复值所在的行。
eg:
这里我们把text3里钢笔后的a,b去掉。
在这里插入图片描述
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.drop_duplicates(subset=‘产品’,keep=‘last’)
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
1 2 铅笔 0.5 1 20 10 10 10
2 3 钢笔 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20

keep=‘first’:保留第一个重复值的数据;
keep=‘last’:保留最后一个重复值的数据;
keep=‘Flase’:把重复值一个不留的全部删除。

c.获取唯一值

使用pandas模块的unuque()函数可以获取某列数据的唯一值。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘产品’].unique()
print(a)
运行结果:
[‘钢笔a’ ‘铅笔’ ‘钢笔b’ ‘书包’ ‘笔袋’]

E.排序数据

排列数据会用到sort_values()函数和rank()函数。

a.使用sort_values()函数

sort_values()函数是将数据按照大小进行升序排序或降序排列,ascending=True升序排序,ascending=False降序排序。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.sort_values(by=‘数量’,ascending=True)#ascending=True升序排序
print(a)
运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
2 3 钢笔b 15.0 20 2 30 40 10
3 4 书包 50.0 60 2 100 120 20
4 5 笔袋 10.0 15 4 40 60 20
0 1 钢笔a 10.0 15 5 50 75 25
1 2 铅笔 0.5 1 20 10 10 10

b.使用rank()函数

rank()函数是获取数据的排名。

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].rank(method=‘average’,ascending=False)#参数method指定数据有重复值时的处理方式,参数ascenging=False降序排序
print(a)

运行结果:
0 1.0
1 4.5
2 4.5
3 2.5
4 2.5
Name: 利润, dtype: float64

eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].rank(method=‘first’,ascending=False)#method='first’表示数据重复时,先出现的数据排在前面
print(a)

运行结果:
0 1.0
1 4.0
2 5.0
3 2.0
4 3.0
Name: 利润, dtype: float64

F.筛选数据

单个条件:判断是否相等用比较运算符“ == ”,判断大小用“>”、“<”。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[data[‘产品’]==‘书包’]#筛选’产品’列中与’书包’值相等的数据
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
3 4 书包 50.0 60 2 100 120 20

与条件:逻辑与关系的条件间用“&”连接。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[(data[‘产品’]==‘书包’)&(data[‘数量’]>1)]#筛选’产品’列中与’书包’值相等且’数量’列中>1的数据
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
3 4 书包 50.0 60 2 100 120 20

或条件:逻辑或关系的条件间用“|”连接。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[(data[‘产品’]==‘书包’)|(data[‘数量’]>10)]#筛选’产品’列中与’书包’值相等或’数量’列中>10的数据
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
1 2 铅笔 0.5 1 20 10 10 10
3 4 书包 50.0 60 2 100 120 20

三.数据表的处理

A.转置数据表的行列

转置行列即将行数据转换到列方向上,列数据转换到行方向上。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.T#T属性转置行列
print(a)

运行结果:
0 1 2 3 4
序号 1 2 3 4 5
产品 钢笔a 铅笔 钢笔b 书包 笔袋
进价 10.0 0.5 15.0 50.0 10.0
售价 15 1 20 60 15
数量 5 20 2 2 4
成本 50 10 30 100 40
收入 75 10 40 120 60
利润 25 10 10 20 20

B.数据表转为树状结构

数据表转为树状结构是在维持二维表格的行标签不变的前提下,将列标签也变成行标签,即为二维表格建立层次化的索引。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.stack()#转为树形结构
print(a)

运行结果:
0 序号 1
产品 钢笔a
进价 10.0
售价 15
数量 5
成本 50
收入 75
利润 25
1 序号 2
产品 铅笔
进价 0.5
售价 1
数量 20
成本 10
收入 10
利润 10
2 序号 3
产品 钢笔b
进价 15.0
售价 20
数量 2
成本 30
收入 40
利润 10
3 序号 4
产品 书包
进价 50.0
售价 60
数量 2
成本 100
收入 120
利润 20
4 序号 5
产品 笔袋
进价 10.0
售价 15
数量 4
成本 40
收入 60
利润 20
dtype: object

C.数据表的拼接

a.merge()函数

merge()函数可以根据一个或多个相同的列将不同数据表的行连接起来。
默认的合并方式是取交集。
eg:
text3:
在这里插入图片描述
text4:
在这里插入图片描述
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data2 = pd.read_excel(r’F:\text4.xlsx’)
a = pd.merge(data1,data2)
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 库存
0 1 钢笔a 10.0 15 5 50 75 25 20
1 2 铅笔 0.5 1 20 10 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10 15
3 4 书包 50.0 60 2 100 120 20 5
4 5 笔袋 10.0 15 4 40 60 20 10

如果想合并两个表的全部数据,将merge()函数添加参数how=‘outer’即可。
eg:
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data2 = pd.read_excel(r’F:\text4.xlsx’)
a = pd.merge(data1,data2,how=‘outer’)
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 库存
0 1 钢笔a 10.0 15 5 50 75 25 20
1 2 铅笔 0.5 1 20 10 10 10 10
2 3 钢笔b 15.0 20 2 30 40 10 15
3 4 书包 50.0 60 2 100 120 20 5
4 5 笔袋 10.0 15 4 40 60 20 10
5 6 修正带 NaN 6 6 30 36 6 10

b.concat()函数

concat()函数是全连接数据的方式,可以不需要某些列或索引相同直接将两个或多个数据表合并。
eg:
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data2 = pd.read_excel(r’F:\text4.xlsx’)
a = pd.concat([data1,data2])
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 库存
0 1 钢笔a 10.0 15 5 50 75 25 NaN
1 2 铅笔 0.5 1 20 10 10 10 NaN
2 3 钢笔b 15.0 20 2 30 40 10 NaN
3 4 书包 50.0 60 2 100 120 20 NaN
4 5 笔袋 10.0 15 4 40 60 20 NaN
0 1 钢笔a 10.0 15 5 50 75 25 20.0
1 2 铅笔 0.5 1 20 10 10 10 10.0
2 3 钢笔b 15.0 20 2 30 40 10 15.0
3 4 书包 50.0 60 2 100 120 20 5.0
4 5 笔袋 10.0 15 4 40 60 20 10.0
5 6 修正带 NaN 6 6 30 36 6 10.0

当某数据只存在一个表格时会识别为缺失值NaN,而且合并后行标签不变。

重置行标签设置参数ignore_index=True。
eg:
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data2 = pd.read_excel(r’F:\text4.xlsx’)
a = pd.concat([data1,data2],ignore_index=True)#参数ignore_index=True表示重置行标签
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 库存
0 1 钢笔a 10.0 15 5 50 75 25 NaN
1 2 铅笔 0.5 1 20 10 10 10 NaN
2 3 钢笔b 15.0 20 2 30 40 10 NaN
3 4 书包 50.0 60 2 100 120 20 NaN
4 5 笔袋 10.0 15 4 40 60 20 NaN
5 1 钢笔a 10.0 15 5 50 75 25 20.0
6 2 铅笔 0.5 1 20 10 10 10 10.0
7 3 钢笔b 15.0 20 2 30 40 10 15.0
8 4 书包 50.0 60 2 100 120 20 5.0
9 5 笔袋 10.0 15 4 40 60 20 10.0
10 6 修正带 NaN 6 6 30 36 6 10.0

c.append()函数

append()函数是直接将一个或多个数据表中的数据合并到其他数据表中。
eg:
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
data2 = pd.read_excel(r’F:\text4.xlsx’)
a = data1.append(data2)
print(a)

运行结果:
序号 产品 进价 售价 数量 成本 收入 利润 库存
0 1 钢笔a 10.0 15 5 50 75 25 NaN
1 2 铅笔 0.5 1 20 10 10 10 NaN
2 3 钢笔b 15.0 20 2 30 40 10 NaN
3 4 书包 50.0 60 2 100 120 20 NaN
4 5 笔袋 10.0 15 4 40 60 20 NaN
0 1 钢笔a 10.0 15 5 50 75 25 20.0
1 2 铅笔 0.5 1 20 10 10 10 10.0
2 3 钢笔b 15.0 20 2 30 40 10 15.0
3 4 书包 50.0 60 2 100 120 20 5.0
4 5 笔袋 10.0 15 4 40 60 20 10.0
5 6 修正带 NaN 6 6 30 36 6 10.0

append()函数号可以通过传入字典在数据表的末尾追加行数据。
eg:
import pandas as pd
data1 = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data1.append({‘产品’:‘修正带’,‘进价’:3},ignore_index=True)#参数ignore_index=True表示忽略原有行标签
print(a)
运行结果:
序号 产品 进价 售价 数量 成本 收入 利润
0 1.0 钢笔a 10.0 15.0 5.0 50.0 75.0 25.0
1 2.0 铅笔 0.5 1.0 20.0 10.0 10.0 10.0
2 3.0 钢笔b 15.0 20.0 2.0 30.0 40.0 10.0
3 4.0 书包 50.0 60.0 2.0 100.0 120.0 20.0
4 5.0 笔袋 10.0 15.0 4.0 40.0 60.0 20.0
5 NaN 修正带 3.0 NaN NaN NaN NaN NaN

四.数据的运算

eg:

运行结果:

A.数据的统计运算

a.sum()函数求和

sum()函数可以对数据表的每一列数据分别进行求和。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.sum()
print(a)

运行结果:
序号 15
产品 钢笔a铅笔钢笔b书包笔袋
进价 85.5
售价 111
数量 33
成本 230
收入 305
利润 85
dtype: object

sum()函数也可以对数据表的指定列求和。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].sum()
print(a)

运行结果:
85

b.mean()函数求均值

mean()函数可以对数据表的每一列数据分别进行求均值。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.mean()
print(a)

运行结果:
序号 3.0
进价 17.1
售价 22.2
数量 6.6
成本 46.0
收入 61.0
利润 17.0
dtype: float64

同理,也可以对数据表的指定列求均值。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].mean()
print(a)

运行结果:
17.0

c.max()、min()函数求最值

max()函数可以统计每一列最大值;min()函数可以统计每一列最小值。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.max()
b = data.min()
print(a)
print(b)
运行结果:
序号 5
产品 铅笔
进价 50.0
售价 60
数量 20
成本 100
收入 120
利润 25
dtype: object
序号 1
产品 书包
进价 0.5
售价 1
数量 2
成本 10
收入 10
利润 10
dtype: object

同理,也可以对数据表的指定列求最值。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].max()
print(a)

运行结果:
25

B.数值分布情况

pandas模块中的describe()函数可以获取数据表所有数组数据的分布情况,包括数据的个数、均值、最值、方差、分位数等。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.describe()
print(a)

运行结果:
序号 进价 售价 … 成本 收入 利润
count 5.000000 5.000000 5.000000 … 5.000000 5.000000 5.000000
mean 3.000000 17.100000 22.200000 … 46.000000 61.000000 17.000000
std 1.581139 19.125899 22.286767 … 33.615473 40.987803 6.708204
min 1.000000 0.500000 1.000000 … 10.000000 10.000000 10.000000
25% 2.000000 10.000000 15.000000 … 30.000000 40.000000 10.000000
50% 3.000000 10.000000 15.000000 … 40.000000 60.000000 20.000000
75% 4.000000 15.000000 20.000000 … 50.000000 75.000000 20.000000
max 5.000000 50.000000 60.000000 … 100.000000 120.000000 25.000000
[8 rows x 7 columns]

同理,在data后可指定列,单独查看分布情况。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data[‘利润’].describe()
print(a)

运行结果:
count 5.000000
mean 17.000000
std 6.708204
min 10.000000
25% 10.000000
50% 20.000000
75% 20.000000
max 25.000000
Name: 利润, dtype: float64

C.corr()函数计算相关系数

相关系数用来衡量两个或多个元素间的相关程度,pandas模块的corr()函数计算相关系数。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.corr()
print(a)

运行结果:
序号 进价 售价 数量 成本 收入 利润
序号 1.000000 0.409217 0.418577 -0.415945 0.329252 0.308607 0.000000
进价 0.409217 1.000000 0.998465 -0.574765 0.941788 0.873645 0.295206
售价 0.418577 0.998465 1.000000 -0.616154 0.952374 0.893282 0.331094
数量 -0.415945 -0.574765 -0.616154 1.000000 -0.633887 -0.704395 -0.470588
成本 0.329252 0.941788 0.952374 -0.633887 1.000000 0.983434 0.598671
收入 0.308607 0.873645 0.893282 -0.704395 0.983434 1.000000 0.718301
利润 0.000000 0.295206 0.331094 -0.470588 0.598671 0.718301 1.000000

同理,可以通过指定列标签来查看指定列与其他列的相关系数。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.corr()[‘利润’]
print(a)

运行结果:
序号 0.000000
进价 0.295206
售价 0.331094
数量 -0.470588
成本 0.598671
收入 0.718301
利润 1.000000
Name: 利润, dtype: float64

D.groupby()函数分组汇总数据

pandas模块的groupby()函数可以对数据进行分组。因为groupby()函数返回的是一个DataFrameGroupBy对象,该对象分组后不能直观显示出来,还要加上求和、求均值、求最值等特点的汇总计算,来获取直观的结果。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.groupby(‘产品’).sum()
print(a)

运行结果:
序号 进价 售价 数量 成本 收入 利润
产品
书包 4 50.0 60 2 100 120 20
笔袋 5 10.0 15 4 40 60 20
钢笔a 1 10.0 15 5 50 75 25
钢笔b 3 15.0 20 2 30 40 10
铅笔 2 0.5 1 20 10 10 10

同理,可以指定列,也可以选取多列分组后进行汇总计算。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = data.groupby(‘产品’)[‘数量’,‘利润’].sum()
print(a)

运行结果:
数量 利润
产品
书包 2 20
笔袋 4 20
钢笔a 5 25
钢笔b 2 10
铅笔 20 10

E.pivot_table()函数创建数据透视表

数据透视表可以快速对数据表进行分组和计算,pandas模块里pivot_table()函数可以创建数据透视表。
参数values用于指定要计算的列;
参数index用于指定一个列做为数据表的行标签;
参数aggfunc用于指定参数values的计算类型。
eg:
import pandas as pd
data = pd.read_excel(r’F:\text3.xlsx’)#演示文档
a = pd.pivot_table(data,values=[‘利润’,‘成本’],index=‘产品’,aggfunc=‘sum’)
print(a)

运行结果:
利润 成本
产品
书包 20 100
笔袋 20 40
钢笔a 25 50
钢笔b 10 30
铅笔 10 10

五.实战演练:获取并分析股票的历史数据

我们分析中环股份为例。
整体思路是使用tushare和pandas,通过tushare获取股票历史数据,再选定分析的时间段,以月为单位,计算1000股的收益情况。
话不多说,直接上代码:

import tushare as ts
import pandas as pd
zhonghuan = ts.get_k_data(code='002129',start='2021-1-1')
print(zhonghuan)
zhonghuan.to_csv('zhonghuan.csv')
zhonghuan = pd.read_csv('zhonghuan.csv',index_col='date',parse_dates=['date'])
print(zhonghuan)
zhonghuan = zhonghuan['2021-1-1':'2022-1-16']
month_first = zhonghuan.resample('M').first()
month_first_money = month_first['open'].sum()*1000
month_max = zhonghuan.resample('M').last()
month_max_money = month_max['close'].sum()*1000
get_money = month_max_money - month_first_money
print(get_money)

运行结果:
date open close high low volume code
182 2021-10-08 46.55 46.20 47.40 45.61 503332.0 002129
183 2021-10-11 46.50 46.10 46.87 45.02 396086.0 002129
184 2021-10-12 46.00 44.36 46.75 43.51 518934.0 002129
185 2021-10-13 44.80 48.01 48.54 44.50 782369.0 002129
186 2021-10-14 48.02 49.04 49.99 48.02 723061.0 002129
… … … … … … … …
248 2022-01-11 37.79 39.45 39.55 37.60 506066.0 002129
249 2022-01-12 39.91 41.36 41.50 39.28 619687.0 002129
250 2022-01-13 41.39 41.20 41.84 40.70 460598.0 002129
251 2022-01-14 40.72 40.84 42.15 40.72 333514.0 002129
252 2022-01-17 41.42 41.01 42.40 40.90 361450.0 002129

[71 rows x 7 columns]
Unnamed: 0 open close high low volume code
date
2021-10-08 182 46.55 46.20 47.40 45.61 503332.0 2129
2021-10-11 183 46.50 46.10 46.87 45.02 396086.0 2129
2021-10-12 184 46.00 44.36 46.75 43.51 518934.0 2129
2021-10-13 185 44.80 48.01 48.54 44.50 782369.0 2129
2021-10-14 186 48.02 49.04 49.99 48.02 723061.0 2129
… … … … … … … …
2022-01-11 248 37.79 39.45 39.55 37.60 506066.0 2129
2022-01-12 249 39.91 41.36 41.50 39.28 619687.0 2129
2022-01-13 250 41.39 41.20 41.84 40.70 460598.0 2129
2022-01-14 251 40.72 40.84 42.15 40.72 333514.0 2129
2022-01-17 252 41.42 41.01 42.40 40.90 361450.0 2129

[71 rows x 7 columns]
-4509.999999999942

小结

这一篇我们粗略讲了pandas模块进阶,并进行了简单的实战演练。

此系列文,仅记录鄙人python学习路程的一个片段,参考价值可能不大,写的不好请多多谅解,欢迎大佬们评论留言,指正鄙人的不足之处。(感激不尽!!!)

最后,

生活于生活之上,便知晓百花和万物沉默的思想。不管怎样,记得好好吃饭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr.Waverly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值