第4章 pandas模块入门
4.1 数据结构
pandas有两个重要的数据结构对象:Series和DataFrame。
4.1.1 Series对象
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
4.1.2 DataFrame对象
会自动生成行列标签
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.2 读取数据
4.2.1 读取Excel数据:read_excel()函数
1. 读取特定工作簿:sheet_name参数
例如对下表的数据进行读取
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对象,同时自动把第一行数据当做列标签。
2. 指定列标签:header参数
header参数可以指定列标签
可以看出不给出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
3. 指定行标签:index_col参数
该参数默认为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=0时
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
4. 读取指定列:usecols参数
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
4.2.2 读取csv文件数据:read_csv()函数
数据如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j642fEC0-1636891425493)(C:\Users\14051\AppData\Roaming\Typora\typora-user-images\image-20211114192949607.png)]
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参数可以指定显示的行数
nrows=3时
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
4.3 查看数据的行数和列数
4.3.1 查看数据的前几行:head()函数
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
4.3.2 查看数据的行数和列数:shape属性
numpy模块也是shape
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)
4.3.3 查看数据的类型
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):
--- ------ -------------- -----
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
4.4 选择数据
4.4.1 选择行数据:loc()、iloc()函数
先查看一下所有数据
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
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]])
产品 数量 金额
订单编号
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])
产品 数量 金额
订单编号
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
print(data[a])
产品 数量 金额
订单编号
d003 打印机 1台 298
d005 复印纸 2箱 100
d006 条码纸 6卷 34
4.4.2 选择列数据:iloc()函数
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卷
4.4.3 同时选择行列数据
标签挑选
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
4.5 修改行标签和列标签:columns、index参数;set_index()函数
先查看一下数据
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
ta = data.rename(columns={‘订单编号’:‘编号’, ‘产品’:‘产品名称’, ‘数量’:‘订单数量’, ‘金额’:‘订单金额’}, index = {0:‘A’, 1:‘B’, 2:‘C’, 3:‘D’, 4:‘E’, 5:‘F’}) print(data)
```python
编号 产品名称 订单数量 订单金额
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
|