学习 Python 之 Pandas库
- Pandas库
- 什么是Pandas库?
- DataFrame 创建和存储
- 1. 使用DataFrame构造函数
- (1). 使用列表创建
- (2). 使用字典创建
- (3). 从另一个DataFrame对象创建
- 2. 从文件读取
- (1). 从.csv文件读取
- (2). 从excel文件读取
- 3. 存储
- DataFrame 查看数据
- 1. 查看前几行
- 2. 查看后几行
- 3. 格式查看
- 4. 查看统计信息
- DataFrame 列操作
- 1. 增加列
- 2. 删除列
- 3. 选择列
- 4. 修改列
- DataFrame 索引
- 1. 数字索引
- 2. 布尔索引
- 3. 标签索引
- DataFrame 操作
- 1. 纵向合并
- 2. 横向合并
- 3. 空值处理
- (1). 判断空值
- (2). 计算空值个数
- (3). 删除空值
- (4). 填充空值
- 4. 去重
- 5. 排序
- 6. 分组
- 7. 分段
Pandas库
什么是Pandas库?
Pandas是基于Numpy的专业数据分析工具, 可以灵活高效的处理各种数据集
它提供了的数据结构有DataFrame和Series等
我们可以简单粗的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列
DataFrame 创建和存储
函数
函数 | 作用 |
---|---|
DataFrame(data = 数据, index = 行标题, columns = 列标题, dtype = 类型, copy = 是否深拷贝) | 创建DataFrame对象 |
read_csv(filepath_or_buffer = 文件路径, delimiter = 分隔符, header = 是否第一行为列标题, engine = 引擎, encoding = 编码) | 读取.csv文件创建DataFrame对象 |
read_excel(路径, header = 指定哪一行为标题, names = 指定列标题) | 读取.xlsx文件创建DataFrame对象 |
.to_csv(路径) | 保存为.csv文件 |
.to_excel(路径) | 保存为.xlsx文件 |
1. 使用DataFrame构造函数
函数 | 作用 |
---|---|
DataFrame(data = 数据, index = 行标题, columns = 列标题, dtype = 类型, copy = 是否深拷贝) | 创建DataFrame对象 |
创建时不指定index,系统会自动生成从0开始的索引, 即行标题从0开始
(1). 使用列表创建
import pandasdataFrame = pandas.DataFrame(data = [[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index = ['小明', '小红', '小强',],columns=['语文', '数学', '英语', '化学'],dtype = float,copy = True)print(dataFrame)
结果:
语文数学英语化学小明60.078.092.085.0小红70.068.095.076.0小强88.098.083.087.0
使用列表创建
一个列表表示一条记录
index是每一条记录的名称
columns是每一列的名字
(2). 使用字典创建
import pandasdataFrame = pandas.DataFrame(data = {'语文': [60, 78, 92, 85],'数学': [70, 68, 95, 76],'英语': [88, 98, 83, 87],},index = ['小明', '小红', '小强', '小美'],dtype = float,copy = True)print(dataFrame)
结果:
语文数学英语小明60.070.088.0小红78.068.098.0小强92.095.083.0小美85.076.087.0
使用字典创建
列名称是字典中键的名称, 字典中的元素是该列的值
index是每一条记录的名称, index的长度与字典中某一个键值对的值的长度一样
(3). 从另一个DataFrame对象创建
import pandasdataFrame = pandas.DataFrame(data = [[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index = ['小明', '小红', '小强', ],columns = ['语文', '数学', '英语', '化学'],dtype = float,copy = False)dataFrame2 = pandas.DataFrame(dataFrame, copy = False)print(dataFrame2)dataFrame2['语文'] = [0, 0, 0]print(dataFrame)
结果:
语文数学英语化学小明60.078.092.085.0小红70.068.095.076.0小强88.098.083.087.0语文数学英语化学小明 078.092.085.0小红 068.095.076.0小强 098.083.087.0
从已有的DataFrame创建, copy参数可以指定深拷贝还是浅拷贝
当copy = False是浅拷贝, 上面的这个例子就证明了
2. 从文件读取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPjNMdzf-1654143923432)(Pandas图片/img_1.png)]
函数 | 作用 |
---|---|
read_csv(filepath_or_buffer = 文件路径, delimiter = 分隔符, header = 是否第一行为列标题, engine = 引擎, encoding = 编码) | 读取.csv文件创建DataFrame对象 |
read_excel(路径, header = 指定哪一行为标题, names = 指定列标题) | 读取.xlsx文件创建DataFrame对象 |
(1). 从.csv文件读取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbWIevrU-1654143923434)(Pandas图片/img_2.png)]
import pandasdataFrame = pandas.read_csv('../数据/test.csv')print(dataFrame)
结果:
姓名语文数学 英语0小明62.066.0 86.01小红86.097.5100.0
默认分隔符以”,”逗号分割, 可以指定分割类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djldd8ju-1654143923435)(Pandas图片/img_3.png)]
import pandasdataFrame = pandas.read_csv('../数据/test.csv',delimiter = '|')print(dataFrame)
结果:
姓名语文数学 英语0小明62.066.0 86.01小红86.097.5100.0
默认以第一行作为列标题, 可以不知道列标题, 这样第一行也变成了数据
import pandasdataFrame = pandas.read_csv(filepath_or_buffer = '../数据/test.csv',delimiter = '|',header = None,engine = 'python',encoding = 'utf-8')print(dataFrame)
结果:
01 2 30姓名 语文数学英语1小明62. 66. 86.2小红86.97.5100.
engine是使用的分析引擎,读取csv文件一般指定python避免中文和编码造成的报错
encoding是编码格式
(2). 从excel文件读取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M48iNtPG-1654143923436)(Pandas图片/img.png)]
import pandasdataFrame = pandas.read_excel('../数据/test.XLSX',header = None)print(dataFrame)
0 1 20姓名语文数学1小明66.5862小红8999.5
3. 存储
函数 | 作用 |
---|---|
.to_csv(路径) | 保存为.csv文件 |
.to_excel(路径) | 保存为.xlsx文件 |
DataFrame 查看数据
函数
函数 | 作用 |
---|---|
.head(n = 5) | 查看数据前n行 |
.tail(n = 5) | 查看数据后n行 |
.info() | 查看数据信息 |
.describe() | 查看数据统计信息 |
1. 查看前几行
import pandasfrom sklearn import datasetsiris = datasets.load_iris()dataFrame = pandas.DataFrame(iris.data)print(dataFrame.head(10))
结果:
012305.13.51.40.214.93.01.40.224.73.21.30.234.63.11.50.245.03.61.40.255.43.91.70.464.63.41.40.375.03.41.50.284.42.91.40.294.93.11.50.1
2. 查看后几行
import pandasfrom sklearn import datasetsiris = datasets.load_iris()dataFrame = pandas.DataFrame(iris.data)print(dataFrame.tail())
结果:
01231456.73.05.22.31466.32.55.01.91476.53.05.22.01486.23.45.42.31495.93.05.11.8
3. 格式查看
import pandasfrom sklearn import datasetsiris = datasets.load_iris()dataFrame = pandas.DataFrame(iris.data)print(dataFrame.info())
结果:
# 对象的类型# 数据范围, 一共150个, 从0 - 149RangeIndex: 150 entries, 0 to 149# 数据一共4列Data columns (total 4 columns): # ColumnNon-Null CountDtype---------------------------- 0 0 150 non-nullfloat64 1 1 150 non-nullfloat64 2 2 150 non-nullfloat64 3 3 150 non-nullfloat64dtypes: float64(4)memory usage: 4.8 KBNone
4. 查看统计信息
import pandasfrom sklearn import datasetsiris = datasets.load_iris()dataFrame = pandas.DataFrame(iris.data)print(dataFrame.describe())
结果:
0 1 2 3count150.000000150.000000150.000000150.000000mean 5.8433333.0573333.7580001.199333std0.8280660.4358661.7652980.762238min4.3000002.0000001.0000000.10000025%5.1000002.8000001.6000000.30000050%5.8000003.0000004.3500001.30000075%6.4000003.3000005.1000001.800000max7.9000004.4000006.9000002.500000
DataFrame 列操作
函数
函数 | 作用 |
---|---|
.drop(列名, axis = 1, inplace = True) | 查看数据前n行 |
1. 增加列
增加一列,用dataFrame[‘新列名’] = 新列值的形式, 在原数据基础上赋值即可
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index = ['小明', '小红', '小强', ],columns = ['语文', '数学', '英语', '化学'],dtype = float)print(dataFrame)dataFrame['生物'] = [96, 86, 88]print(dataFrame)
结果:
语文数学英语化学小明60.078.092.085.0小红70.068.095.076.0小强88.098.083.087.0语文数学英语化学生物小明60.078.092.085.096小红70.068.095.076.086小强88.098.083.087.088
将其他的数据列增加过来, 即横向合并
import pandasdataFrame1 = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns=['等级', '爱好', '年龄', '身高'],index = ['小明', '小红', '小强', '小于'])print(dataFrame1)dataFrame2 = pandas.DataFrame(data=[['学士', 'O'],['学士', 'A'],['博士', 'A'],['院士', 'B'],],columns=['学位', '血型'],index = ['小明', '小红', '小强', '小于'])print(dataFrame2)r = pandas.merge(left = dataFrame1,right = dataFrame2,left_index = True,right_index = True,how = 'inner')print(r)
结果:
等级爱好年龄 身高小明一级读书21176小红二级游泳22178小强三级游泳21185小于二级游泳19182学位 血型小明学士O小红学士A小强博士A小于院士B
2. 删除列
使用, axis = 0表示对行操作, axis = 1表示针对列的操作, inplace为True, 则直接在源数据上进行修改, 否则源数据会保持原样
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index = ['小明', '小红', '小强', ],columns = ['语文', '数学', '英语', '化学'],dtype = float)dataFrame['生物'] = [96, 86, 88]print(dataFrame)dataFrame.drop('化学', axis = 1, inplace = True)print(dataFrame)
结果:
语文数学英语化学生物小明60.078.092.085.096小红70.068.095.076.086小强88.098.083.087.088语文数学英语生物小明60.078.092.096小红70.068.095.086小强88.098.083.088
3. 选择列
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index=['小明', '小红', '小强', ],columns=['语文', '数学', '英语', '化学'],dtype=float)print(dataFrame['语文'])print(dataFrame[['语文', '化学']])
结果:
小明60.0小红70.0小强88.0Name: 语文, dtype: float64语文化学小明60.085.0小红70.076.0小强88.087.0
4. 修改列
全部修改为同一个值
指定修改的列的内容
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87]],index=['小明', '小红', '小强', ],columns=['语文', '数学', '英语', '化学'],dtype=float)dataFrame['语文'] = 1dataFrame['化学'] = [100, 100, 100.0]print(dataFrame)
结果:
语文数学英语 化学小明 178.092.0100.0小红 168.095.0100.0小强 198.083.0100.0
DataFrame 索引
属性 | 作用 |
---|---|
iloc[ , ] | 对数据操作, 允许整数, 整数的列表, 切片, 布尔数组 |
loc[ , ] | 对数据操作, 允许标签和布尔 |
isin(数据列表) | 处于数据列表 |
1. 数字索引
dataFrame[行索引, 列索引]
取出数据中 3×3的零
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87],[60, 78, 92, 85],[70, 0, 0, 0],[88, 0, 0, 0],[60, 0, 0, 0],[70, 68, 95, 76],[88, 98, 83, 87]],dtype = float,columns = ['语文', '数学', '英语', '化学'])a = dataFrame.iloc[4:7, 1:]print(a)
结果:
数学 英语 化学40.00.00.050.00.00.060.00.00.0
取出数据中 2×2的零
import pandasdataFrame = pandas.DataFrame(data=[[60, 78, 92, 85],[70, 68, 95, 76],[88, 98, 83, 87],[60, 78, 92, 85],[70, 0, 92, 0],[60, 78, 92, 85],[60, 0, 92, 0],[70, 68, 95, 76],[88, 98, 83, 87]],dtype = float,columns = ['语文', '数学', '英语', '化学'])a = dataFrame.iloc[4:7:2, 1:4:2]print(a)
结果:
数学 化学40.00.060.00.0
2. 布尔索引
dataFrame[行索引, 列索引]
行索引和列索引可以是布尔数组
import pandasdataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns = ['等级', '爱好', '年龄', '身高'])b = [True, False, False, True]a = dataFrame.iloc[b, :]print(a)
结果:
等级爱好年龄 身高0一级读书211763二级游泳19182
iloc()函数参数允许:
- 整数
- 整数的列表
- 切片
- 布尔数组
3. 标签索引
import pandasdataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns=['等级', '爱好', '年龄', '身高'])# 找出等级为一的全部数据b = (dataFrame['等级'] == '一级') & (dataFrame['年龄'] == 21)r = dataFrame.loc[b, :]print(r)r = dataFrame.loc[:, ['年龄']]print(r)
结果:
等级爱好年龄 身高0一级读书21176 年龄021122221319
找出等级在是二和三的数据
import pandasdataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns=['等级', '爱好', '年龄', '身高'])b = dataFrame['等级'].isin(['二级', '三级'])r = dataFrame.loc[b, :]print(r)
结果:
等级爱好年龄 身高1二级游泳221782三级游泳211853二级游泳19182
DataFrame 操作
函数 | 作用 |
---|---|
concat(dataFrame列表) | 将这些dataFrame的数据纵向叠加 |
merge(left = 左表, right = 右表, left_index, right_index, how = 连接方式) | 按照指定连接方式将两个表合并 |
.dropna(subset = 列名列表) | 只要一行中任意一个字段为空,就会被删除 |
.isnull() | 返回布尔DataFrame对象 |
.fillna(值) | 用值填充空值 |
.dropduplicates(subset = 列名列表, keep = 'first' 或 'last') | 删除完全重复行, 可指定某字段重复时删除, 默认保留第一个, 后面重复的会删掉 |
.sort_values(by = 列名, ascending = 是否升序) | 对指定列排序 |
.groupby('列名') | 对指定列分组, 就是把该列值一样的分成一组 |
cut(x = 切分数据, bins = 切分方式, right = 是否包含右区间, labels = 分割后每段的名字列表) | 对一个数组进行分段 |
inplace属性 True : 对原来数据操作, False : 不对原来的数据操作 |
1. 纵向合并
import pandasdataFrame1 = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns=['等级', '爱好', '年龄', '身高'],index = ['小明', '小红', '小强', '小于'])r = pandas.concat([dataFrame1, dataFrame1])print(r)
结果:
等级爱好年龄 身高小明一级读书21176小红二级游泳22178小强三级游泳21185小于二级游泳19182小明一级读书21176小红二级游泳22178小强三级游泳21185小于二级游泳19182
2. 横向合并
import pandasdataFrame1 = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 22, 178],['三级', '游泳', 21, 185],['二级', '游泳', 19, 182],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame1)dataFrame2 = pandas.DataFrame(data=[['学士', 'O'],['学士', 'A'],['博士', 'A'],['院士', 'B'],],columns=['学位', '血型'],index=['小明', '小红', '小强', '小于'])print(dataFrame2)r = pandas.merge(left=dataFrame1,right=dataFrame2,left_index=True,right_index=True,how='inner')print(r)
结果:
等级爱好年龄 身高小明一级读书21176小红二级游泳22178小强三级游泳21185小于二级游泳19182小明一级读书21176小红二级游泳22178小强三级游泳21185小于二级游泳19182
参数 | 作用 |
---|---|
left | 左表名 |
right | 右表名 |
left_index | 左表按照索引连接 |
right_index | 右表按照索引连接 |
how | 连接方式, inner, left, right, outer |
左连接左表数据不改变, 连接时没有的字段为空
右连接右表数据不改变, 连接时没有的字段为空
外连接是两个表的数据都不变, 没有的字段为空
3. 空值处理
函数 | 作用 |
---|---|
.dropna(subset = 列名列表) | 只要一行中任意一个字段为空,就会被删除 |
.isnull() | 返回布尔DataFrame对象 |
(1). 判断空值
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)print(dataFrame.isnull())print(dataFrame['等级'].isnull())
结果:
等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN 等级 爱好 年龄 身高小明False TrueFalseFalse小红FalseFalse TrueFalse小强FalseFalseFalseFalse小于 TrueFalseFalse True小明False小红False小强False小于 TrueName: 等级, dtype: bool
(2). 计算空值个数
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)print(dataFrame.isnull().sum())
结果:
等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN等级1爱好1年龄1身高1dtype: int64
(3). 删除空值
dropna()函数, 只要一行中任意一个字段为空,就会被删除
dropna(subset = [‘列名’]), 指定当某列出现空值才删除
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)print(dataFrame.dropna())
结果:
等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN等级爱好年龄 身高小强三级游泳21.0185.0
(4). 填充空值
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)dataFrame['年龄'] = dataFrame['年龄'].fillna(20)print(dataFrame)
结果:
小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN等级爱好年龄 身高小明一级None21.0176.0小红二级游泳20.0178.0小强三级游泳21.0185.0小于None游泳19.0NaN
4. 去重
函数 | 作用 |
---|---|
.dropduplicates(subset = 列名列表, keep = 'first' 或 'last') | 删除完全重复行, 可指定某字段重复时删除, 默认保留第一个, 后面重复的会删掉 |
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)print(dataFrame.drop_duplicates(subset = ['爱好'], keep = 'first'))
结果:
等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0
5. 排序
函数 | 作用 |
---|---|
.sort_values(by = 列名, ascending = 是否升序) | 对某列排序 |
import pandasdataFrame = pandas.DataFrame(data=[['一级', None, 21, 176],['二级', '游泳', None, 178],['三级', '游泳', 21, 185],[None, '游泳', 19, None],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)dataFrame = dataFrame.sort_values(by = '等级', ascending = True)print(dataFrame)
结果:
等级爱好年龄 身高小明一级None21.0176.0小红二级游泳 NaN178.0小强三级游泳21.0185.0小于None游泳19.0NaN等级爱好年龄 身高小明一级None21.0176.0小强三级游泳21.0185.0小红二级游泳 NaN178.0小于None游泳19.0NaN
6. 分组
分组就是把指定的一列的值相同的分为一组, 调用一些函数对这些指定列值相同数据进行操作
函数 | 作用 |
---|---|
.groupby('列名') | 对指定列分组, 就是把该列值一样的分成一组 |
计算值函数 | 作用 |
---|---|
sum() | 组内求和 |
max() | 组内求最大值 |
min() | 组内求最小值 |
std() | 组内求标准差 |
mean() | 组内求平均数 |
import pandasdataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 20, 178],['三级', '游泳', 21, 185],['四级', '游泳', 19, 177],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于'])print(dataFrame)groupData = dataFrame.groupby('年龄')print(groupData)print(groupData.sum())print(groupData.max())print(groupData.min())print(groupData.std())print(groupData.mean())
结果:
等级爱好年龄 身高小明一级读书21176小红二级游泳20178小强三级游泳21185小于四级游泳19177 身高年龄 191772017821361等级爱好 身高年龄 19四级游泳17720二级游泳17821三级读书185等级爱好 身高年龄 19四级游泳17720二级游泳17821一级游泳176身高年龄19 NaN20 NaN216.363961 身高年龄 19177.020178.021180.5
可以指定分组后的数据的列进行操作
dataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 20, 178],['三级', '游泳', 21, 185],['四级', '游泳', 19, 177],['四级', '读书', 19, 165],['四级', '读书', 19, 190],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于', '小兰', '小智'])print(dataFrame)groupData = dataFrame.groupby('年龄')groupData = groupData['身高']print(groupData.sum())
结果:
等级爱好年龄 身高小明一级读书21176小红二级游泳20178小强三级游泳21185小于四级游泳19177小兰四级读书19165小智四级读书19190年龄195322017821361Name: 身高, dtype: int64
7. 分段
函数 | 作用 |
---|---|
cut(x = 切分数据, bins = 切分方式, right = 是否包含右区间, labels = 分割后每段的名字列表) | 对一个数组进行分段 |
import pandasdataFrame = pandas.DataFrame(data=[['一级', '读书', 21, 176],['二级', '游泳', 20, 178],['三级', '游泳', 21, 185],['四级', '游泳', 19, 177],['四级', '读书', 19, 165],['四级', '读书', 19, 190],],columns=['等级', '爱好', '年龄', '身高'],index=['小明', '小红', '小强', '小于', '小兰', '小智'])r = pandas.cut(x = dataFrame['身高'], bins = [160, 170, 180, 190, 200], right = False, labels = ['中等身高', '身高较高', '身高很高', '身高太高'])print(r, end = '\n')r = pandas.cut(x=dataFrame['身高'], bins = 4, right=False, labels=['中等身高', '身高较高', '身高很高', '身高太高'])print(r)
结果:
小明身高较高小红身高较高小强身高很高小于身高较高小兰中等身高小智身高太高Name: 身高, dtype: categoryCategories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']小明身高较高小红身高很高小强身高太高小于身高较高小兰中等身高小智身高太高Name: 身高, dtype: categoryCategories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']