目录
一、作用
二、基础环境
(一)执行虚拟环境的终端命令
(二)代码中导包
三、应用:一维数组
(一)Series对象
1. 含义
2. 常用属性和方法
(1)属性
(2)方法
(二)创建一维数组
1. 使用Series(序列)对象,索引默认从0开始
2. Series可用index指定索引
3. Series搭配字典指定索引
4. 筛选数据
(三)取一位数组的值
1. 按索引取值
2. 按位置取值
(四)计算向量值
1. 根据索引来计算,而不是位置对应
2. 计算不存在的列,则得空值NaN
(五)处理空值
1. dropna 删除空值
2. 填充空值
(1)fillna 填充空值
(2)add的fill_value属性
(六)获取基本统计值
四、应用:二维数组
(一)DataFrame 对象
1. 含义
2. 常用属性和方法
(1)属性
(2)方法
(二)建立二维数组
1. 使用DataFrame(数据框)
2. 数据类型可不一致
(三) 获取二维数组的值
1. 按索引取值
2. 按位置取值
3. 按列名取值
(四)二维数组的数据处理
1. 列操作
(1)重命名列名
(2)添加新列
2. 行操作
(1)删除指定行
3. 索引操作
(1)重置索引
(2)修改索引
4. 处理空值
(1)判断空值
(2)填充空值
(3)删除空值
5. 转换数值类型
(1)转成float64格式
(2)转成时间格式
6. 数据排序
7. 去重
(五)常用函数
1. 运用
2. 常用
(1)mean( )
(2)groupby( )
五、分析xls文件
(一)基础环境
(二)查看文件数据
(三)处理文件数据
一、作用
数据整理分析库、基于Numpy。
二、基础环境
(一)执行虚拟环境的终端命令
pip install pandas
(二)代码中导包
import pandas as pd
三、应用:一维数组
(一)Series对象
1. 含义
Series 适用于一维数组。利用列表、字典等对象,创建带有标签(索引)的一维数组。
2. 常用属性和方法
(1)属性
se = pd.Series(['数据结构', '数据库原理', '计算机', '操作系统'])
print(se.size) # 返回元素总个数 4
print(se.shape) # 返回行数&列数 (4,)
print(se.index) # 返回行索引 RangeIndex(start=0, stop=4, step=1)
print(se.index.tolist()) # 返回列表形式的行索引 [0, 1, 2, 3]
print(se.axes) # [RangeIndex(start=0, stop=4, step=1)]
(2)方法
print(se.head(2)) # 前几行数据,默认前5行
print(se.tail(2)) # 后几行数据,默认后5行
print(se.describe()) # 描述统计信息,包括计算总数、唯一值个数、出现最高频率等
(二)创建一维数组
1. 使用Series(序列)对象,索引默认从0开始
a = ['数据结构', '数据库原理', '计算机', '操作系统']
b = pd.Series(a)
2. Series可用index指定索引
a = ['数据结构', '数据库原理', '计算机', '操作系统']
b = pd.Series(a, index=['索引1', '索引2', '索引3', '索引4'])
print(b)
3. Series搭配字典指定索引
test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict)
print(b)
4. 筛选数据
test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict, index=['索引1', '索引9'])
print(b)
结果是:
索引1 数据结构
索引9 NaN
dtype: object
如果想要去除index对应为NaN的数据,则搭配dropna。
test_dict = {'索引1': '数据结构', '索引2': '数据库原理', '索引3': '计算机', '索引4': '操作系统'}
b = pd.Series(test_dict, index=['索引1', '索引9'])
print(b)
结果是:
索引1 数据结构
dtype: object
(三)取一位数组的值
iloc:第几行为索引,loc:标签为索引。
1. 按索引取值
a = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']
b = pd.Series(a, index=[31,32,33,34])
c = b[31] # 数据结构
c2 = b.loc[31] # 数据结构
2. 按位置取值
a = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']
b = pd.Series(a, index=[31,32,33,34])
c = b[31] # 数据结构
c2 = b.iloc[0] # 数据结构
(四)计算向量值
1. 根据索引来计算,而不是位置对应
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[32,31,34,33])
c = a+b
print(c)
结果是:
31 102
32 201
33 304
34 403
dtype: int64
# 其中,索引31对应的值是102,而不是101
2. 计算不存在的列,则得空值NaN
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
# c = a.add(b)
print(c)
结果是:
30 NaN
31 NaN
32 202.0
33 304.0
34 403.0
(五)处理空值
1. dropna 删除空值
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
# c = a.add(b)
d = c.dropna()
print(d)
结果是:
32 202.0
33 304.0
34 403.0
2. 填充空值
(1)fillna 填充空值
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a+b
d=c.fillna('空值')
print(d)
结果是:
30 空值
31 空值
32 202.0
33 303.0
34 404.0
dtype: object
(2)add的fill_value属性
a = pd.Series([100, 200, 300, 400], index=[31,32,33,34])
b = pd.Series([1,2,3,4], index=[30,32,33,34])
c = a.add(b, fill_value=0)
print(c)
结果是:
30 1.0
31 100.0
32 202.0
33 303.0
34 404.0
(六)获取基本统计值
a = [1,2,3,4,5]
b = pd.Series(a, index=['第1位数', '第2位数', '第3位数', '第4位数', '第5位数'])
c = b.describe()
四、应用:二维数组
(一)DataFrame 对象
1. 含义
DataFrame适用于二维数组。可以从二维数组、字典、CSV文件等,创建二维表格。
其他知识点:
NA:not available 不可用
NaN:not a number
NAT:not a time
2. 常用属性和方法
(1)属性
df = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': [100,200,300,400]
})
print(df.size) # 返回元素总个数 12
print(df.shape) # 返回行数&列数 (4,3)
print(df.columns) # 返回列索引 Index(['待售书籍', '出版社', '预售数量'], dtype='object')
print(df.columns.tolist()) # 返回列表形式的列索引 ['待售书籍', '出版社', '预售数量']
print(df.index) # 返回行索引 RangeIndex(start=0, stop=4, step=1)
print(df.index.tolist()) # 返回列表形式的行索引 [0, 1, 2, 3]
print(df.axes) # [RangeIndex(start=0, stop=4, step=1), Index(['待售书籍', '出版社', '预售数量'], dtype='object')]
(2)方法
df = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': [100,200,300,400]
})
print(df.head(2)) # 前几行数据,默认前5行
print(df.tail(2)) # 后几行数据,默认后5行
print(df.describe()) # 描述统计信息,包括计数、均值、标准差、最值等
(二)建立二维数组
1. 使用DataFrame(数据框)
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': [100,200,300,400]
})
结果是:
待售书籍 出版社 预售数量
0 小熊之家 爱月社 100
1 复兴之路 兴业社 200
2 操作系统 阳光组 300
3 爱的教育 教育局 400
2. 数据类型可不一致
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': ['100',2.00,300,400]
})
结果是:
待售书籍 出版社 预售数量
0 小熊之家 爱月社 ¥100
1 复兴之路 兴业社 2.0
2 操作系统 阳光组 300
3 爱的教育 教育局 400
# 其中,¥100是字串, 2.0是浮点数,300是整数
(三) 获取二维数组的值
1. 按索引取值
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': ['100',2.00,300,400]
})
b = a.loc[0, '待售书籍'] # 小熊之家
b2 = a.loc[1, :] # loc 列索引
结果是:
待售书籍 复兴之路
出版社 兴业社
预售数量 2.0
# 其中,a的值是:
待售书籍 出版社 预售数量
0 小熊之家 爱月社 100
1 复兴之路 兴业社 2.0
2 操作系统 阳光组 300
3 爱的教育 教育局 400
2. 按位置取值
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': ['100',2.00,300,400]
})
b = a.iloc[0,1] # 爱月社
b2 = a.iloc[0, :] # 获取第一行的值(并且呈现表格的形式),iloc 行索引
结果是:
待售书籍 小熊之家
出版社 爱月社
预售数量 100
# 其中,a的值是:
待售书籍 出版社 预售数量
0 小熊之家 爱月社 100
1 复兴之路 兴业社 2.0
2 操作系统 阳光组 300
3 爱的教育 教育局 400
3. 按列名取值
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'预售数量': ['100',2.00,300,400]
})
b = a[ ['待售书籍', '出版社'] ] # 双阵列
print(b)
结果是:
待售书籍 出版社
0 小熊之家 爱月社
1 复兴之路 兴业社
2 操作系统 阳光组
3 爱的教育 教育局
# 其中,a的值是:
待售书籍 出版社 预售数量
0 小熊之家 爱月社 100
1 复兴之路 兴业社 2.0
2 操作系统 阳光组 300
3 爱的教育 教育局 400
4. 按范围取值
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b=a.loc[0:2, '作者':'价格¥']
结果是:
作者 出版社 价格¥
0 星星 爱月社 35.0
1 扇子 兴业社 48.0
2 刺猬 阳光组 37.0
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
5. 按自定义条件取值
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b=a.loc[:, '价格¥'] > 40 # 判断价格是否大于40
c = a.loc[b, :] # 将判断后的索引作为范围条件
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
1 复兴之路 扇子 兴业社 48.0 200
3 爱的教育 尾巴 教育局 42.0 400
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
# 以及,b的值是:
0 False
1 True
2 False
3 True
Name: 价格¥, dtype: bool
(四)二维数组的数据处理
1. 列操作
(1)重命名列名
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
a.rename(columns={'待售书籍': '图书名', '作者': '作家'}, inplace=True)
b = a # 不能用b = a.rename(...),而是b = a
print(b)
结果是:
图书名 作家 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
(2)添加新列
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
a['出版时间'] = ['20240101', '20240202', '20240304', '20240405']
print(a)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量 出版时间
0 小熊之家 星星 爱月社 35.0 100 20240101
1 复兴之路 扇子 兴业社 48.0 200 20240202
2 操作系统 刺猬 阳光组 37.0 300 20240304
3 爱的教育 尾巴 教育局 42.0 400 20240405
(3)删除指定列
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
a.drop('待售书籍', axis=1) # axis=1表示操作列
print(a)
结果是:
作者 出版社 价格¥ 预售数量
0 星星 爱月社 35.0 100
1 扇子 兴业社 48.0 200
2 刺猬 阳光组 37.0 300
3 尾巴 教育局 42.0 400
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
2. 行操作
(1)删除指定行
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b = a.drop(0, axis=0) # 参数位置1的索引0表示第一行, 参数位置2的axis=0表示操作行
print(b)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
3. 索引操作
(1)重置索引
a = pd.DataFrame({
'待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b = a.dropna(subset=['待售书籍', '作者'], how='any') # 去除指定列中含有空值的行数据
c = b.reset_index(drop=True)
print(c)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 操作系统 刺猬 阳光组 37.0 300
2 爱的教育 尾巴 教育局 42.0 400
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 None 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
(2)修改索引
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
a.index = a['作者']
print(a)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
作者
星星 小熊之家 星星 爱月社 35.0 100
扇子 复兴之路 扇子 兴业社 48.0 200
刺猬 操作系统 刺猬 阳光组 37.0 300
尾巴 爱的教育 尾巴 教育局 42.0 400
# 其中,a的原始值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 复兴之路 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
4. 处理空值
(1)判断空值
a = pd.DataFrame({
'待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b= a.isnull()
print(b)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
0 False False False False False
1 True False False False False
2 False False False False False
3 False False False False False
(2)填充空值
a = pd.DataFrame({
'待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b= a.fillna('空值')
print(b)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 空值 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
(3)删除空值
a = pd.DataFrame({
'待售书籍': ['小熊之家', None, '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400]
})
b = a.dropna(subset=['待售书籍', '作者'], how='any') # 去除指定列中含有空值的行数据
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
# 其中,a的值是:
待售书籍 作者 出版社 价格¥ 预售数量
0 小熊之家 星星 爱月社 35.0 100
1 None 扇子 兴业社 48.0 200
2 操作系统 刺猬 阳光组 37.0 300
3 爱的教育 尾巴 教育局 42.0 400
5. 转换数值类型
(1)转成float64格式
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400],
'出版日期': ['20240101','20240202','20240304','20240405']
})
a['待售书籍'] = a['待售书籍'].astype('float') # 将object转换为float64格式
print(a)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量 出版日期
0 小熊之家 星星 爱月社 35.0 100.0 20240101
1 复兴之路 扇子 兴业社 48.0 200.0 20240202
2 操作系统 刺猬 阳光组 37.0 300.0 20240304
3 爱的教育 尾巴 教育局 42.0 400.0 20240405
(2)转成时间格式
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400],
'出版日期': ['20240101','20240202','20240304','20240405']
})
a.loc[:, '出版日期'] = pd.to_datetime(a.loc[:, '出版日期'],
format='%Y%m%d', # 原数据格式
errors='coerce') # 不符合格式的值转成NaT
print(a)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量 出版日期
0 小熊之家 星星 爱月社 35.0 100 2024-01-01 00:00:00
1 复兴之路 扇子 兴业社 48.0 200 2024-02-02 00:00:00
2 操作系统 刺猬 阳光组 37.0 300 2024-03-04 00:00:00
3 爱的教育 尾巴 教育局 42.0 400 2024-04-05 00:00:00
6. 数据排序
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '刺猬', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400],
'出版日期': ['20240101','20240202','20240304','20240405']
})
b = a.sort_values(by='出版日期', ascending=True,na_position='first')
# na_position='first' 表示排序时,空值靠前。
print(b)
7. 去重
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '小熊之家'],
'作者': ['星星', '扇子', '刺猬', '星星'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400],
'出版日期': ['20240101','20240202','20240304','20240405']
})
b = a.drop_duplicates(subset=['待售书籍', '作者'])
print(b)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量 出版日期
0 小熊之家 星星 爱月社 35.0 100 20240101
1 复兴之路 扇子 兴业社 48.0 200 20240202
2 操作系统 刺猬 阳光组 37.0 300 20240304
# 其中,a的值:
待售书籍 作者 出版社 价格¥ 预售数量 出版日期
0 小熊之家 星星 爱月社 35.0 100 20240101
1 复兴之路 扇子 兴业社 48.0 200 20240202
2 操作系统 刺猬 阳光组 37.0 300 20240304
3 小熊之家 星星 教育局 42.0 400 20240405
(五)常用函数
1. 运用
计算每列(而不是每行)
2. 常用
mean() 求平均数、std()求标准差、count()计数、nunique()去重后计数、groupby() 分组等查询。
(1)mean( )
a = pd.DataFrame({
'预售数量': [10,20,30,40],
'实际出售': [100,200,300,400]
})
b = a.mean()
结果是:
预售数量 25.0
实际出售 250.0
(2)groupby( )
a = pd.DataFrame({
'待售书籍': ['小熊之家', '复兴之路', '操作系统', '爱的教育'],
'作者': ['星星', '扇子', '星星', '尾巴'],
'出版社': ['爱月社', '兴业社', '阳光组', '教育局'],
'价格¥': [35.00,48.00,37.00,42.00],
'预售数量': [100,200,300,400],
'出版日期': ['20240101','20240101','20240304','20240405']
})
b = a.groupby(a['出版日期']).sum()
print(b)
结果是:
待售书籍 作者 出版社 价格¥ 预售数量
出版日期
20240101 小熊之家复兴之路 星星扇子 爱月社兴业社 83.0 300
20240304 操作系统 星星 阳光组 37.0 300
20240405 爱的教育 尾巴 教育局 42.0 400
五、分析xls文件
(一)基础环境
执行虚拟环境的终端命令:
pip install openpyxl
(二)查看文件数据
filename = 'D:\book\test\\20240509测试数据book.xlsx' # 文件位置
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str) # 打开文件
a = open_data.head(10) # 只读取十笔数据
b =open_data.shape # 查看行数、列数 (12, 7)
b =open_data.shape[0] # 查看行数 (12)
Excel文件内容如下:
(三)处理文件数据
1. 连续范围取值
filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
a = open_data.head(6)
print(a) # 查看截取的部分数据
print(open_data) # 一次性查看所有数据
结果是:
图书名 name 作者 author 图书类型 btype
0 数据结构 小星星 计算机
1 操作系统 小糖人 计算机
2 无人生还 艾草青 现代文学
3 科幻世界 草莓熊 现代文学
4 世界另我 花木兰 现代文学
5 西游记 吴承恩 古典文学
2. 自定义范围取值
filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
a = open_data.loc[0:5, '图书名 name':'图书类型 btype'] #截取数据
print(a)
结果是:
图书名 name 作者 author 图书类型 btype
0 数据结构 小星星 计算机
1 操作系统 小糖人 计算机
2 无人生还 艾草青 现代文学
3 科幻世界 草莓熊 现代文学
4 世界另我 花木兰 现代文学
5 西游记 吴承恩 古典文学
3. 检查文件数据
filename = 'D:\book\test\\20240509测试数据book.xlsx'
open_data = pd.read_excel(filename, sheet_name='bookinfo', dtype=str)
# a = open_data.head(10)
a = open_data.loc[0:5, '图书号 card':'出版日期 bdate']
b = a.describe() # 可以查看数据笔数、时间格式是否正确等
print(b)
结果是:
图书号 card 图书名 name 作者 author 图书类型 btype 出版社 press 图书总量 num 出版日期 bdate
count 5 5 5 5 6 6 5
unique 5 4 4 4 2 5 5
top 1F001 无人生还 艾草青 计算机 教育部 10 2023-01-04 00:00:00
freq 1 2 2 2 3 2 1