二. pandas入门
2.1 数据结构
pandas有两个重要的数据结构对象:Series和DataFrame
2.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
2.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
2.2 读取数据
2.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参数时,该参数默认为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=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
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
2.2.2 读取csv:read_csv()
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
2.3 查看数据的行数和列数
2.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
2.3.2 查看行数和列数: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)
2.3.3 查看数据的类型:info()、dtype、astype()
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
2.4 选择数据
2.4.1 选择行:loc()、iloc()
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
2.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卷
2.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