前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转:人工智能从入门到精通教程
pandas有两个重要的数据结构对象:Series和DataFrame
Series是创建一个一维数组对象,会自动生成行标签。
import pandas as pd
s = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'])
print(s)
0 短裤
1 毛衣
2 连衣裙
3 牛仔裤
dtype: object
index参数可以指定行标签
import pandas as pd
s1 = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'], index = ['a001', 'a002', 'a003', 'a004']) # 添加行标签
print(s1)
a001 短裤
a002 毛衣
a003 连衣裙
a004 牛仔裤
dtype: object
使用Series对象还可以基于字典创建数据
import pandas as pd
s2 = pd.Series({'a001':'短裤', 'a002':'毛衣', 'a003':'连衣裙', 'a004':'牛仔裤'})
print(s2)
a001 短裤
a002 毛衣
a003 连衣裙
a004 牛仔裤
dtype: object
会自动生成行列标签
import pandas as pd
df = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]])
print(df)
0 1
0 短裤 45
1 毛衣 69
2 连衣裙 119
3 牛仔裤 99
可以columns参数指定列标签;index参数指定行标签
import pandas as pd
df1 = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]],
columns=['产品', '单价'], index=['a001', 'a002', 'a003', 'a004'])
print(df1)
产品 单价
a001 短裤 45
a002 毛衣 69
a003 连衣裙 119
a004 牛仔裤 99
例:也可以用字典形式生成数据
import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]})
print(df3)
产品 单价
0 短裤 45
1 毛衣 69
2 连衣裙 119
3 牛仔裤 99
例:在用字典生成数据的基础上,同时指定行标签
import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]}, index = ['a001', 'a002', 'a003', 'a004'])
print(df3)
产品 单价
a001 短裤 45
a002 毛衣 69
a003 连衣裙 119
a004 牛仔裤 99
例如对下表的数据进行读取
4月是第四个表,我们应把sheet_name参数指定为3;因为索引是从0开始的。
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
5 d006 条码纸 6卷 34
可以看出read_excel()函数自动创建了一个DataFrame对象,同时自动把第一行数据当做列标签。
可以看出不给出header参数时,该参数默认为0。
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, header=0)
print(data)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
5 d006 条码纸 6卷 34
header=1时结果如下:
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, header=1)
print(data)
d001 投影仪 5台 2000
0 d002 马克笔 5盒 300
1 d003 打印机 1台 298
2 d004 点钞机 1台 349
3 d005 复印纸 2箱 100
4 d006 条码纸 6卷 34
header=None时结果如下:
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3, header = None)
print(data)
0 1 2 3
0 订单编号 产品 数量 金额
1 d001 投影仪 5台 2000
2 d002 马克笔 5盒 300
3 d003 打印机 1台 298
4 d004 点钞机 1台 349
5 d005 复印纸 2箱 100
6 d006 条码纸 6卷 34
该参数默认为None
index_col=0时,第0列为列标签
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data)
产品 数量 金额
订单编号
d001 投影仪 5台 2000
d002 马克笔 5盒 300
d003 打印机 1台 298
d004 点钞机 1台 349
d005 复印纸 2箱 100
d006 条码纸 6卷 34
index_col=1时
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=1)
print(data)
订单编号 数量 金额
产品
投影仪 d001 5台 2000
马克笔 d002 5盒 300
打印机 d003 1台 298
点钞机 d004 1台 349
复印纸 d005 2箱 100
条码纸 d006 6卷 34
usecols=[2]:指定第二列
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, usecols=[2])
print(data)
数量
0 5台
1 5盒
2 1台
3 1台
4 2箱
5 6卷
指定多列
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, usecols=[1, 3])
print(data)
产品 金额
0 投影仪 2000
1 马克笔 300
2 打印机 298
3 点钞机 349
4 复印纸 100
5 条码纸 34
import pandas as pd
data = pd.read_csv('订单表.csv')
print(data)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
5 d006 条码纸 6卷 34
nrows参数可以指定显示的行数
import pandas as pd
data = pd.read_csv('订单表.csv', nrows=3) # 显示三行
print(data)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
head()函数中参数为空默认前5行
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.head())
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
例:指定head(3)时如下
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.head(3))
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
print(data.shape)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
5 d006 条码纸 6卷 34
(6, 4)
1. info()函数
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
print(data.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 订单编号 6 non-null object
1 产品 6 non-null object
2 数量 6 non-null object
3 金额 6 non-null int64
dtypes: int64(1), object(3)
memory usage: 320.0+ bytes
None
2. dtype参数
例:查看特定列的书库类型
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
print(data['金额'].dtype)
int64
3. astype()函数
例:特定列的数据类型转换
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
data['金额'] = data['金额'].astype('float64')
print(data)
print(data['金额'].dtype)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000.0
1 d002 马克笔 5盒 300.0
2 d003 打印机 1台 298.0
3 d004 点钞机 1台 349.0
4 d005 复印纸 2箱 100.0
5 d006 条码纸 6卷 34.0
float64
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0) #index_col指定行标签
print(data)
产品 数量 金额
订单编号
d001 投影仪 5台 2000
d002 马克笔 5盒 300
d003 打印机 1台 298
d004 点钞机 1台 349
d005 复印纸 2箱 100
d006 条码纸 6卷 34
1. 挑选单行
loc()函数加行标签指定行
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc['d001'])
产品 投影仪
数量 5台
金额 2000
Name: d001, dtype: object
iloc()函数加索引指定行号
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[2])
产品 打印机
数量 1台
金额 298
Name: d003, dtype: object
2. 挑选多行
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc[['d002', 'd004']])
产品 数量 金额
订单编号
d002 马克笔 5盒 300
d004 点钞机 1台 349
iloc()挑选:
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[[1, 5]]) # 1,5
产品 数量 金额
订单编号
d002 马克笔 5盒 300
d006 条码纸 6卷 34
产品 数量 金额
或者给出区间
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[1:5]) #1-5
产品 数量 金额
订单编号
d002 马克笔 5盒 300
d003 打印机 1台 298
d004 点钞机 1台 349
d005 复印纸 2箱 100
3. 挑选满足条件的行
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
a = data['金额'] < 300 #挑选金额>300的行
print(data[a])
产品 数量 金额
订单编号
d003 打印机 1台 298
d005 复印纸 2箱 100
d006 条码纸 6卷 34
1. 挑选单列
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data['产品'])
0 投影仪
1 马克笔
2 打印机
3 点钞机
4 复印纸
5 条码纸
Name: 产品, dtype: object
2. 挑选多列
例:通过列标签挑选多列
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data[['产品', '金额']])
产品 金额
0 投影仪 2000
1 马克笔 300
2 打印机 298
3 点钞机 349
4 复印纸 100
5 条码纸 34
例:通过索引挑选多列
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, [1,3]])
产品 金额
0 投影仪 2000
1 马克笔 300
2 打印机 298
3 点钞机 349
4 复印纸 100
5 条码纸 34
或者写成区间
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, 1:3]) # 左闭右开
产品 数量
0 投影仪 5台
1 马克笔 5盒
2 打印机 1台
3 点钞机 1台
4 复印纸 2箱
5 条码纸 6卷
例:通过标签挑选
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data1 = data.loc[['d001', 'd005'], ['产品', '金额']]
print(data1)
产品 金额
订单编号
d001 投影仪 2000
d005 复印纸 100
例:通过索引挑选
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data2 = data.iloc[[2, 4], [0, 2]]
print(data2)
产品 金额
订单编号
d003 打印机 298
d005 复印纸 100
先查看一下数据
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)
订单编号 产品 数量 金额
0 d001 投影仪 5台 2000
1 d002 马克笔 5盒 300
2 d003 打印机 1台 298
3 d004 点钞机 1台 349
4 d005 复印纸 2箱 100
5 d006 条码纸 6卷 34
set_index()设置行标签
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.set_index('订单编号')) #订单编号那一列为行标签
产品 数量 金额
订单编号
d001 投影仪 5台 2000
d002 马克笔 5盒 300
d003 打印机 1台 298
d004 点钞机 1台 349
d005 复印纸 2箱 100
d006 条码纸 6卷 34
例:字典一对一修改
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data = data.rename(columns={'订单编号':'编号', '产品':'产品名称', '数量':'订单数量', '金额':'订单金额'},
index = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F'})
print(data)
编号 产品名称 订单数量 订单金额
A d001 投影仪 5台 2000
B d002 马克笔 5盒 300
C d003 打印机 1台 298
D d004 点钞机 1台 349
E d005 复印纸 2箱 100
F d006 条码纸 6卷 34
columns、index参数分别修改列、行标签
import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data.columns = ['编号', '产品名称', '订单数量', '订单金额']
data.index = ['A', 'B', 'C', 'D', 'E', 'F']
print(data)
编号 产品名称 订单数量 订单金额
A d001 投影仪 5台 2000
B d002 马克笔 5盒 300
C d003 打印机 1台 298
D d004 点钞机 1台 349
E d005 复印纸 2箱 100
F d006 条码纸 6卷 34
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
例:isin()函数查看表中是否有该值
data1 = data.isin(['a005','钱包']) # 查找a005 或 钱包
print(data1)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 False False False False False False False False
1 False True False False False False False False
2 False False False False False False False False
3 False False False False False False False False
4 True True False False False False False False
5 False False False False False False False False
6 False False False False False False False False
例:查看特定列是否有某值
data2 = data['产品'].isin(['手提包'])
print(data2)
0 False
1 False
2 False
3 True
4 False
5 False
6 False
Name: 产品, dtype: bool
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包') #并没有替换
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
可以看出上述代码并没有替换,那怎么替换呢?
1. 一对一替换
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包', inplace = True) # 加入inplace=True
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 挎包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 挎包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
2. 多对一替换
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace(['背包', '手提包'], '挎包', inplace = True)
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 挎包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 挎包 16 65 23 368 1495 1127
3 a004 挎包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
3. 多对多替换
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace({'背包':'挎包', 16:39, 65:88}, inplace = True)
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 挎包 39 88 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 挎包 39 88 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
例:末尾插入一列
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data['品牌'] = ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD']
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元) 品牌
0 a001 背包 16 65 60 960 3900 2940 AM
1 a002 钱包 90 187 50 4500 9350 4850 DE
2 a003 背包 16 65 23 368 1495 1127 SR
3 a004 手提包 36 147 26 936 3822 2886 AM
4 a005 钱包 90 187 78 7020 14586 7566 TY
5 a006 单肩包 58 124 63 3654 7812 4158 DE
6 a007 单肩包 58 124 58 3364 7192 3828 UD
例:指定插入到哪列
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.insert(2, '品牌', ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD'])
print(data)
编号 产品 品牌 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 AM 16 65 60 960 3900 2940
1 a002 钱包 DE 90 187 50 4500 9350 4850
2 a003 背包 SR 16 65 23 368 1495 1127
3 a004 手提包 AM 36 147 26 936 3822 2886
4 a005 钱包 TY 90 187 78 7020 14586 7566
5 a006 单肩包 DE 58 124 63 3654 7812 4158
6 a007 单肩包 UD 58 124 58 3364 7192 3828
axis参数可以指定删除行还是删除列
1. 删除列
例:指定标签删除
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.drop(['成本价(元/个)', '成本(元)'], axis = 1)
print(a)
编号 产品 销售价(元/个) 数量(个) 收入(元) 利润(元)
0 a001 背包 65 60 3900 2940
1 a002 钱包 187 50 9350 4850
2 a003 背包 65 23 1495 1127
3 a004 手提包 147 26 3822 2886
4 a005 钱包 187 78 14586 7566
5 a006 单肩包 124 63 7812 4158
6 a007 单肩包 124 58 7192 3828
例:指定索引删除
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
b = data.drop(data.columns[[2, 5]], axis = 1)
print(b)
编号 产品 销售价(元/个) 数量(个) 收入(元) 利润(元)
0 a001 背包 65 60 3900 2940
1 a002 钱包 187 50 9350 4850
2 a003 背包 65 23 1495 1127
3 a004 手提包 147 26 3822 2886
4 a005 钱包 187 78 14586 7566
5 a006 单肩包 124 63 7812 4158
6 a007 单肩包 124 58 7192 3828
方法三
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
c = data.drop(columns = ['成本价(元/个)', '成本(元)'])
print(c)
编号 产品 销售价(元/个) 数量(个) 收入(元) 利润(元)
0 a001 背包 65 60 3900 2940
1 a002 钱包 187 50 9350 4850
2 a003 背包 65 23 1495 1127
3 a004 手提包 147 26 3822 2886
4 a005 钱包 187 78 14586 7566
5 a006 单肩包 124 63 7812 4158
6 a007 单肩包 124 58 7192 3828
2. 删除行
例:指定行标签删除
import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
a = data.drop(['a001', 'a004'], axis = 0)
print(a)
产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
编号
a002 钱包 90 187 50 4500 9350 4850
a003 背包 16 65 23 368 1495 1127
a005 钱包 90 187 78 7020 14586 7566
a006 单肩包 58 124 63 3654 7812 4158
a007 单肩包 58 124 58 3364 7192 3828
例:指定索引删除
import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
b = data.drop(data.index[[0, 4]], axis = 0)
print(b)
产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
编号
a002 钱包 90 187 50 4500 9350 4850
a003 背包 16 65 23 368 1495 1127
a004 手提包 36 147 26 936 3822 2886
a006 单肩包 58 124 63 3654 7812 4158
a007 单肩包 58 124 58 3364 7192 3828
方法三:
import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
c = data.drop(index = ['a001', 'a004'])
print(c)
产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
编号
a002 钱包 90 187 50 4500 9350 4850
a003 背包 16 65 23 368 1495 1127
a005 钱包 90 187 78 7020 14586 7566
a006 单肩包 58 124 63 3654 7812 4158
a007 单肩包 58 124 58 3364 7192 3828
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
print(data)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16.0 65 60 960.0 3900 2940
1 a002 钱包 90.0 187 50 4500.0 9350 4850
2 a003 背包 NaN 65 23 368.0 1495 1127
3 a004 手提包 36.0 147 26 936.0 3822 2886
4 a005 钱包 90.0 187 78 7020.0 14586 7566
5 a006 单肩包 58.0 124 63 3654.0 7812 4158
6 a007 单肩包 58.0 124 58 NaN 7192 3828
info()函数查看数据类型,还可以查看是否有缺失值
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 编号 7 non-null object
1 产品 7 non-null object
2 成本价(元/个) 6 non-null float64
3 销售价(元/个) 7 non-null int64
4 数量(个) 7 non-null int64
5 成本(元) 6 non-null float64
6 收入(元) 7 non-null int64
7 利润(元) 7 non-null int64
dtypes: float64(2), int64(4), object(2)
memory usage: 576.0+ bytes
1. 查看缺失值:isnull()
isnull()函数查看是否有缺失值;在numpy模块中用isnan()函数
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
a = data.isnull()
print(a)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 False False False False False False False False
1 False False False False False False False False
2 False False True False False False False False
3 False False False False False False False False
4 False False False False False False False False
5 False False False False False False False False
6 False False False False False True False False
2. 删除缺失值:dropna()
例:删除有缺失值的行
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
b = data.dropna()
print(b)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16.0 65 60 960.0 3900 2940
1 a002 钱包 90.0 187 50 4500.0 9350 4850
3 a004 手提包 36.0 147 26 936.0 3822 2886
4 a005 钱包 90.0 187 78 7020.0 14586 7566
5 a006 单肩包 58.0 124 63 3654.0 7812 4158
例:删除整行都为缺失值的行,需要指定how参数
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
c = data.dropna(how = 'all')
print(c)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16.0 65 60 960.0 3900 2940
1 a002 钱包 90.0 187 50 4500.0 9350 4850
2 a003 背包 NaN 65 23 368.0 1495 1127
3 a004 手提包 36.0 147 26 936.0 3822 2886
4 a005 钱包 90.0 187 78 7020.0 14586 7566
5 a006 单肩包 58.0 124 63 3654.0 7812 4158
6 a007 单肩包 58.0 124 58 NaN 7192 3828
3. 缺失值的填充:fillna()
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
d = data.fillna(0) # 缺失值全部填充为0
print(d)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16.0 65 60 960.0 3900 2940
1 a002 钱包 90.0 187 50 4500.0 9350 4850
2 a003 背包 0.0 65 23 368.0 1495 1127
3 a004 手提包 36.0 147 26 936.0 3822 2886
4 a005 钱包 90.0 187 78 7020.0 14586 7566
5 a006 单肩包 58.0 124 63 3654.0 7812 4158
6 a007 单肩包 58.0 124 58 0.0 7192 3828
例:不同列的缺失值设置不同的填充值
import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
e = data.fillna({'成本价(元/个)':16, '成本(元)':3364})
print(e)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16.0 65 60 960.0 3900 2940
1 a002 钱包 90.0 187 50 4500.0 9350 4850
2 a003 背包 16.0 65 23 368.0 1495 1127
3 a004 手提包 36.0 147 26 936.0 3822 2886
4 a005 钱包 90.0 187 78 7020.0 14586 7566
5 a006 单肩包 58.0 124 63 3654.0 7812 4158
6 a007 单肩包 58.0 124 58 3364.0 7192 3828
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a004 手提包 36 147 26 936 3822 2886 # 重复
5 a005 钱包 90 187 78 7020 14586 7566
6 a006 单肩包 58 124 63 3654 7812 4158
1. 删除重复行:drop_duplicates()
a = data.drop_duplicates()
print(a)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
5 a005 钱包 90 187 78 7020 14586 7566
6 a006 单肩包 58 124 63 3654 7812 4158
2. 删除某一列的重复值:subset
默认保留第一个重复值所在的行,删除其他重复值所在的行
b = data.drop_duplicates(subset = '产品')
print(b)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
3 a004 手提包 36 147 26 936 3822 2886
6 a006 单肩包 58 124 63 3654 7812 4158
保留第一个重复值所在的行
c = data.drop_duplicates(subset = '产品', keep = 'first')
print(c)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
3 a004 手提包 36 147 26 936 3822 2886
6 a006 单肩包 58 124 63 3654 7812 4158
保留最后一个重复值所在的行
d = data.drop_duplicates(subset = '产品', keep = 'last')
print(d)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
2 a003 背包 16 65 23 368 1495 1127
4 a004 手提包 36 147 26 936 3822 2886
5 a005 钱包 90 187 78 7020 14586 7566
6 a006 单肩包 58 124 63 3654 7812 4158
是重复的就删除
e = data.drop_duplicates(subset = '产品', keep = False)
print(e)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
6 a006 单肩包 58 124 63 3654 7812 4158
3. 获取唯一值:unique()
f = data['产品'].unique()
print(f)
['背包' '钱包' '手提包' '单肩包']
1. sort_values()
import pandas as pd
data = pd.read_excel('产品统计表2.xlsx')
a = data.sort_values(by = '数量(个)', ascending = True) #第一个参数指定列 第二个参数指定升序
print(a)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
2 a003 背包 16 65 23 368 1495 1127
3 a004 手提包 36 147 26 936 3822 2886
4 a004 手提包 36 147 26 936 3822 2886
1 a002 钱包 90 187 50 4500 9350 4850
0 a001 背包 16 65 60 960 3900 2940
6 a006 单肩包 58 124 63 3654 7812 4158
5 a005 钱包 90 187 78 7020 14586 7566
例:降序如下
b = data.sort_values(by = '数量(个)', ascending = False)
print(b)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
5 a005 钱包 90 187 78 7020 14586 7566
6 a006 单肩包 58 124 63 3654 7812 4158
0 a001 背包 16 65 60 960 3900 2940
1 a002 钱包 90 187 50 4500 9350 4850
3 a004 手提包 36 147 26 936 3822 2886
4 a004 手提包 36 147 26 936 3822 2886
2 a003 背包 16 65 23 368 1495 1127
2. rank()
c = data['利润(元)'].rank(method = 'average', ascending = False) #指定利润降序排序 有重复值则返回重复值的平均排名
print(c)
0 4.0
1 2.0
2 7.0
3 5.5
4 5.5
5 1.0
6 3.0
Name: 利润(元), dtype: float64
参数指定first时,表示在数据有重复值时,越先出现的数据排名越靠前
d = data['利润(元)'].rank(method = 'first', ascending = False)
print(d)
0 4.0
1 2.0
2 7.0
3 5.0
4 6.0
5 1.0
6 3.0
Name: 利润(元), dtype: float64
获取产品为单肩包的行数据
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data[data['产品'] == '单肩包'] #获取产品为单肩包的行数据
print(a)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
获取数量>60的行数据
b = data[data['数量(个)'] > 60] # 获取数量>60的行数据
print(b)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
获取产品为单肩包 且 数量>60 的行数据
c = data[(data['产品'] == '单肩包') & (data['数量(个)'] > 60)]
print(c)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
5 a006 单肩包 58 124 63 3654 7812 4158
获取产品为单肩包 或 数量>60 的行数据
d = data[(data['产品'] == '单肩包') | (data['数量(个)'] > 60)]
print(d)
编号 产品 成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
4 a005 钱包 90 187 78 7020 14586 7566
5 a006 单肩包 58 124 63 3654 7812 4158
6 a007 单肩包 58 124 58 3364 7192 3828
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.T
print(a)
0 1 2 3 4 5 6
编号 a001 a002 a003 a004 a005 a006 a007
产品 背包 钱包 背包 手提包 钱包 单肩包 单肩包
成本价(元/个) 16 90 16 36 90 58 58
销售价(元/个) 65 187 65 147 187 124 124
数量(个) 60 50 23 26 78 63 58
成本(元) 960 4500 368 936 7020 3654 3364
收入(元) 3900 9350 1495 3822 14586 7812 7192
利润(元) 2940 4850 1127 2886 7566 4158 3828
编号 产品 销售价(元/个) 数量(个) 收入(元)
0 a001 背包 65 60 3900
1 a002 钱包 187 50 9350
2 a003 单肩包 124 58 7192
例:stack()函数转换成树形结构
a = data.stack()
print(a)
0 编号 a001
产品 背包
销售价(元/个) 65
数量(个) 60
收入(元) 3900
1 编号 a002
产品 钱包
销售价(元/个) 187
数量(个) 50
收入(元) 9350
2 编号 a003
产品 单肩包
销售价(元/个) 124
数量(个) 58
收入(元) 7192
dtype: object
import pandas as pd
data1 = pd.read_excel('产品表.xlsx', sheet_name = 0) #第0张工作簿
data2 = pd.read_excel('产品表.xlsx',sheet_name = 1) #第1张工作簿
print(data1)
print(data2)
员工编号 员工姓名 员工性别
0 a001 张三 男
1 a002 李四 女
2 a003 王五 男
3 a004 赵六 男
员工编号 员工姓名 销售业绩
0 a001 张三 360000
1 a002 李四 458000
2 a003 王五 369000
3 a004 赵六 450000
4 a005 钱七 500000
1. merge()
a = pd.merge(data1, data2) #行取交集 列取并集
print(a)
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 360000
1 a002 李四 女 458000
2 a003 王五 男 369000
3 a004 赵六 男 450000
how参数指定外连接
b = pd.merge(data1, data2, how = 'outer') #行取并集 列取并集
print(b)
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 360000
1 a002 李四 女 458000
2 a003 王五 男 369000
3 a004 赵六 男 450000
4 a005 钱七 NaN 500000
on参数指定按哪一列合并
c = pd.merge(data1, data2, on = '员工姓名')
print(c)
员工编号_x 员工姓名 员工性别 员工编号_y 销售业绩
0 a001 张三 男 a001 360000
1 a002 李四 女 a002 458000
2 a003 王五 男 a003 369000
3 a004 赵六 男 a004 450000
2. concat()
concat()函数采用全连接的方式,没有的数设置为缺失值
d = pd.concat([data1, data2])
print(d)
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 NaN
1 a002 李四 女 NaN
2 a003 王五 男 NaN
3 a004 赵六 男 NaN
0 a001 张三 NaN 360000.0
1 a002 李四 NaN 458000.0
2 a003 王五 NaN 369000.0
3 a004 赵六 NaN 450000.0
4 a005 钱七 NaN 500000.0
重置行标签
e = pd.concat([data1, data2], ignore_index = True) #重置行标签
print(e)
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 NaN
1 a002 李四 女 NaN
2 a003 王五 男 NaN
3 a004 赵六 男 NaN
4 a001 张三 NaN 360000.0
5 a002 李四 NaN 458000.0
6 a003 王五 NaN 369000.0
7 a004 赵六 NaN 450000.0
8 a005 钱七 NaN 500000.0
3. append()
效果与concat()全连接一样
f = data1.append(data2)
print(f)
员工编号 员工姓名 员工性别 销售业绩
0 a001 张三 男 NaN
1 a002 李四 女 NaN
2 a003 王五 男 NaN
3 a004 赵六 男 NaN
0 a001 张三 NaN 360000.0
1 a002 李四 NaN 458000.0
2 a003 王五 NaN 369000.0
3 a004 赵六 NaN 450000.0
4 a005 钱七 NaN 500000.0
末尾添加行元素
g = data1.append({'员工编号':'a005', '员工姓名':'孙七', '员工性别':'男'}, ignore_index = True)
print(g)
员工编号 员工姓名 员工性别
0 a001 张三 男
1 a002 李四 女
2 a003 王五 男
3 a004 赵六 男
4 a005 孙七 男
1. 求和:sum()
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.sum() # 每一列求和
print(a)
编号 a001a002a003a004a005a006a007
产品 背包钱包背包手提包钱包单肩包单肩包
成本价(元/个) 364
销售价(元/个) 899
数量(个) 358
成本(元) 20802
收入(元) 48157
利润(元) 27355
dtype: object
例:指定列求和
b = data['利润(元)'].sum()
print(b)
27355
2. 求平均值:mean()
c = data.mean() #每一列求平均值
print(c)
成本价(元/个) 52.000000
销售价(元/个) 128.428571
数量(个) 51.142857
成本(元) 2971.714286
收入(元) 6879.571429
利润(元) 3907.857143
dtype: float64
例:指定列求均值
d = data['利润(元)'].mean()
print(d)
3907.8571428571427
3. 求最值:max()
e = data.max()
print(e)
编号 a007
产品 钱包
成本价(元/个) 90
销售价(元/个) 187
数量(个) 78
成本(元) 7020
收入(元) 14586
利润(元) 7566
dtype: object
例:指定列求最值
f = data['利润(元)'].max()
print(f)
7566
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.describe()
print(a)
成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
count 7.000000 7.000000 7.000000 7.000000 7.000000 7.000000
mean 52.000000 128.428571 51.142857 2971.714286 6879.571429 3907.857143
std 31.112698 50.483849 20.053500 2391.447659 4352.763331 2002.194498
min 16.000000 65.000000 23.000000 368.000000 1495.000000 1127.000000
25% 26.000000 94.500000 38.000000 948.000000 3861.000000 2913.000000
50% 58.000000 124.000000 58.000000 3364.000000 7192.000000 3828.000000
75% 74.000000 167.000000 61.500000 4077.000000 8581.000000 4504.000000
max 90.000000 187.000000 78.000000 7020.000000 14586.000000 7566.000000
例:获取单列的情况
b = data['利润(元)'].describe()
print(b)
count 7.000000
mean 3907.857143
std 2002.194498
min 1127.000000
25% 2913.000000
50% 3828.000000
75% 4504.000000
max 7566.000000
Name: 利润(元), dtype: float64
import pandas as pd
data = pd.read_excel('相关性分析.xlsx')
print(data)
代理商编号 年销售额(万元) 年广告费投入额(万元) 成本费用(万元) 管理费用(万元)
0 A-001 20.5 15.6 2.00 0.80
1 A-003 24.5 16.7 2.54 0.94
2 B-002 31.8 20.4 2.96 0.88
3 B-006 34.9 22.6 3.02 0.79
4 B-008 39.4 25.7 3.14 0.84
5 C-003 44.5 28.8 4.00 0.80
6 C-004 49.6 32.1 6.84 0.85
7 C-007 54.8 35.9 5.60 0.91
8 D-006 58.5 38.7 6.45 0.90
corr()函数获取相关系数
a = data.corr()
print(a)
年销售额(万元) 年广告费投入额(万元) 成本费用(万元) 管理费用(万元)
年销售额(万元) 1.000000 0.996275 0.914428 0.218317
年广告费投入额(万元) 0.996275 1.000000 0.918404 0.223187
成本费用(万元) 0.914428 0.918404 1.000000 0.284286
管理费用(万元) 0.218317 0.223187 0.284286 1.000000
例:获取指定列与其他列的相关系数
b = data.corr()['年销售额(万元)']
print(b)
年销售额(万元) 1.000000
年广告费投入额(万元) 0.996275
成本费用(万元) 0.914428
管理费用(万元) 0.218317
Name: 年销售额(万元), dtype: float64
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.groupby('产品') #根据产品列分组
print(a)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000213943E4640>
groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。
b = data.groupby('产品').sum()
print(b)
成本价(元/个) 销售价(元/个) 数量(个) 成本(元) 收入(元) 利润(元)
产品
单肩包 116 248 121 7018 15004 7986
手提包 36 147 26 936 3822 2886
背包 32 130 83 1328 5395 4067
钱包 180 374 128 11520 23936 12416
分组后获取指定列的汇总情况
c = data.groupby('产品')['利润(元)'].sum()
print(c)
产品
单肩包 7986
手提包 2886
背包 4067
钱包 12416
Name: 利润(元), dtype: int64
获取多列的汇总情况
d = data.groupby('产品')['数量(个)', '利润(元)'].sum()
print(d)
数量(个) 利润(元)
产品
单肩包 121 7986
手提包 26 2886
背包 83 4067
钱包 128 12416
import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = pd.pivot_table(data, values = '利润(元)', index = '产品', aggfunc = 'sum') #data.groupby('产品')['利润(元)'].sum() 同样功能
print(a)
利润(元)
产品
单肩包 7986
手提包 2886
背包 4067
钱包 12416
获取多列的情况
b = pd.pivot_table(data, values = ['利润(元)', '成本(元)'], index = '产品', aggfunc = 'sum')
print(b)
利润(元) 成本(元)
产品
单肩包 7986 7018
手提包 2886 936
背包 4067 1328
钱包 12416 11520