学习 Python 之 Pandas库
Pandas库
什么是Pandas库?
Pandas是基于Numpy的专业数据分析工具, 可以灵活高效的处理各种数据集
我们可以简单粗的把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 pandas
dataFrame = pandas.DataFrame(
data = [
[60, 78, 92, 85],
[70, 68, 95, 76],
[88, 98, 83, 87]
],
index = ['小明', '小红', '小强',],
columns=['语文', '数学', '英语', '化学'],
dtype = float,
copy = True
)
print(dataFrame)
结果:
语文 数学 英语 化学
小明 60.0 78.0 92.0 85.0
小红 70.0 68.0 95.0 76.0
小强 88.0 98.0 83.0 87.0
使用列表创建
(2). 使用字典创建
import pandas
dataFrame = pandas.DataFrame(
data = {
'语文': [60, 78, 92, 85],
'数学': [70, 68, 95, 76],
'英语': [88, 98, 83, 87],
},
index = ['小明', '小红', '小强', '小美'],
dtype = float,
copy = True
)
print(dataFrame)
结果:
语文 数学 英语
小明 60.0 70.0 88.0
小红 78.0 68.0 98.0
小强 92.0 95.0 83.0
小美 85.0 76.0 87.0
使用字典创建
index是每一条记录的名称, index的长度与字典中某一个键值对的值的长度一样
(3). 从另一个DataFrame对象创建
import pandas
dataFrame = 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.0 78.0 92.0 85.0
小红 70.0 68.0 95.0 76.0
小强 88.0 98.0 83.0 87.0
语文 数学 英语 化学
小明 0 78.0 92.0 85.0
小红 0 68.0 95.0 76.0
小强 0 98.0 83.0 87.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 pandas
dataFrame = pandas.read_csv('../数据/test.csv')
print(dataFrame)
结果:
姓名 语文 数学 英语
0 小明 62.0 66.0 86.0
1 小红 86.0 97.5 100.0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djldd8ju-1654143923435)(Pandas图片/img_3.png)]
import pandas
dataFrame = pandas.read_csv(
'../数据/test.csv',
delimiter = '|'
)
print(dataFrame)
结果:
姓名 语文 数学 英语
0 小明 62.0 66.0 86.0
1 小红 86.0 97.5 100.0
默认以第一行作为列标题, 可以不知道列标题, 这样第一行也变成了数据
import pandas
dataFrame = pandas.read_csv(
filepath_or_buffer = '../数据/test.csv',
delimiter = '|',
header = None,
engine = 'python',
encoding = 'utf-8'
)
print(dataFrame)
结果:
0 1 2 3
0 姓名 语文 数学 英语
1 小明 62. 66. 86.
2 小红 86. 97.5 100.
engine是使用的分析引擎,读取csv文件一般指定python避免中文和编码造成的报错
(2). 从excel文件读取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M48iNtPG-1654143923436)(Pandas图片/img.png)]
import pandas
dataFrame = pandas.read_excel(
'../数据/test.XLSX',
header = None
)
print(dataFrame)
0 1 2
0 姓名 语文 数学
1 小明 66.5 86
2 小红 89 99.5
3. 存储
函数 | 作用 |
---|---|
.to_csv(路径) |
保存为.csv文件 |
.to_excel(路径) |
保存为.xlsx文件 |
DataFrame 查看数据
函数 | 作用 |
---|---|
.head(n = 5) |
查看数据前n行 |
.tail(n = 5) |
查看数据后n行 |
.info() |
查看数据信息 |
.describe() |
查看数据统计信息 |
1. 查看前几行
import pandas
from sklearn import datasets
iris = datasets.load_iris()
dataFrame = pandas.DataFrame(iris.data)
print(dataFrame.head(10))
结果:
0 1 2 3
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
5 5.4 3.9 1.7 0.4
6 4.6 3.4 1.4 0.3
7 5.0 3.4 1.5 0.2
8 4.4 2.9 1.4 0.2
9 4.9 3.1 1.5 0.1
2. 查看后几行
import pandas
from sklearn import datasets
iris = datasets.load_iris()
dataFrame = pandas.DataFrame(iris.data)
print(dataFrame.tail())
结果:
0 1 2 3
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
3. 格式查看
import pandas
from sklearn import datasets
iris = datasets.load_iris()
dataFrame = pandas.DataFrame(iris.data)
print(dataFrame.info())
结果:
# 对象的类型
<class 'pandas.core.frame.DataFrame'>
# 数据范围, 一共150个, 从0 - 149
RangeIndex: 150 entries, 0 to 149
# 数据一共4列
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 150 non-null float64
1 1 150 non-null float64
2 2 150 non-null float64
3 3 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
None
4. 查看统计信息
import pandas
from sklearn import datasets
iris = datasets.load_iris()
dataFrame = pandas.DataFrame(iris.data)
print(dataFrame.describe())
结果:
0 1 2 3
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
DataFrame 列操作
函数 | 作用 |
---|---|
.drop(列名, axis = 1, inplace = True) |
查看数据前n行 |
1. 增加列
增加一列,用dataFrame[‘新列名’] = 新列值的形式, 在原数据基础上赋值即可
import pandas
dataFrame = 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.0 78.0 92.0 85.0
小红 70.0 68.0 95.0 76.0
小强 88.0 98.0 83.0 87.0
语文 数学 英语 化学 生物
小明 60.0 78.0 92.0 85.0 96
小红 70.0 68.0 95.0 76.0 86
小强 88.0 98.0 83.0 87.0 88
将其他的数据列增加过来, 即横向合并
import pandas
dataFrame1 = 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)
结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
学位 血型
小明 学士 O
小红 学士 A
小强 博士 A
小于 院士 B
2. 删除列
使用, axis = 0表示对行操作, axis = 1表示针对列的操作, inplace为True, 则直接在源数据上进行修改, 否则源数据会保持原样
import pandas
dataFrame = 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.0 78.0 92.0 85.0 96
小红 70.0 68.0 95.0 76.0 86
小强 88.0 98.0 83.0 87.0 88
语文 数学 英语 生物
小明 60.0 78.0 92.0 96
小红 70.0 68.0 95.0 86
小强 88.0 98.0 83.0 88
3. 选择列
import pandas
dataFrame = 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.0
Name: 语文, dtype: float64
语文 化学
小明 60.0 85.0
小红 70.0 76.0
小强 88.0 87.0
4. 修改列
指定修改的列的内容
import pandas
dataFrame = pandas.DataFrame(
data=[
[60, 78, 92, 85],
[70, 68, 95, 76],
[88, 98, 83, 87]
],
index=['小明', '小红', '小强', ],
columns=['语文', '数学', '英语', '化学'],
dtype=float
)
dataFrame['语文'] = 1
dataFrame['化学'] = [100, 100, 100.0]
print(dataFrame)
结果:
语文 数学 英语 化学
小明 1 78.0 92.0 100.0
小红 1 68.0 95.0 100.0
小强 1 98.0 83.0 100.0
DataFrame 索引
属性 | 作用 |
---|---|
iloc[ , ] |
对数据操作, 允许整数, 整数的列表, 切片, 布尔数组 |
loc[ , ] |
对数据操作, 允许标签和布尔 |
isin(数据列表) |
处于数据列表 |
1. 数字索引
dataFrame[行索引, 列索引]
取出数据中 3×3的零
import pandas
dataFrame = 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)
结果:
数学 英语 化学
4 0.0 0.0 0.0
5 0.0 0.0 0.0
6 0.0 0.0 0.0
取出数据中 2×2的零
import pandas
dataFrame = 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)
结果:
数学 化学
4 0.0 0.0
6 0.0 0.0
2. 布尔索引
dataFrame[行索引, 列索引]
行索引和列索引可以是布尔数组
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 22, 178],
['三级', '游泳', 21, 185],
['二级', '游泳', 19, 182],
],
columns = ['等级', '爱好', '年龄', '身高']
)
b = [True, False, False, True]
a = dataFrame.iloc[b, :]
print(a)
结果:
等级 爱好 年龄 身高
0 一级 读书 21 176
3 二级 游泳 19 182
3. 标签索引
import pandas
dataFrame = 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 一级 读书 21 176
年龄
0 21
1 22
2 21
3 19
找出等级在是二和三的数据
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 22, 178],
['三级', '游泳', 21, 185],
['二级', '游泳', 19, 182],
],
columns=['等级', '爱好', '年龄', '身高']
)
b = dataFrame['等级'].isin(['二级', '三级'])
r = dataFrame.loc[b, :]
print(r)
结果:
等级 爱好 年龄 身高
1 二级 游泳 22 178
2 三级 游泳 21 185
3 二级 游泳 19 182
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 pandas
dataFrame1 = pandas.DataFrame(
data=[
['一级', '读书', 21, 176],
['二级', '游泳', 22, 178],
['三级', '游泳', 21, 185],
['二级', '游泳', 19, 182],
],
columns=['等级', '爱好', '年龄', '身高'],
index = ['小明', '小红', '小强', '小于']
)
r = pandas.concat([dataFrame1, dataFrame1])
print(r)
结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
2. 横向合并
import pandas
dataFrame1 = 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)
结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
小明 一级 读书 21 176
小红 二级 游泳 22 178
小强 三级 游泳 21 185
小于 二级 游泳 19 182
参数 | 作用 |
---|---|
left |
左表名 |
right |
右表名 |
left_index |
左表按照索引连接 |
right_index |
右表按照索引连接 |
how |
连接方式, inner, left, right, outer |
3. 空值处理
函数 | 作用 |
---|---|
.dropna(subset = 列名列表) |
只要一行中任意一个字段为空,就会被删除 |
.isnull() |
返回布尔DataFrame对象 |
(1). 判断空值
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull())
print(dataFrame['等级'].isnull())
结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 False True False False
小红 False False True False
小强 False False False False
小于 True False False True
小明 False
小红 False
小强 False
小于 True
Name: 等级, dtype: bool
(2). 计算空值个数
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.isnull().sum())
结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 1
爱好 1
年龄 1
身高 1
dtype: int64
(3). 删除空值
dropna()函数, 只要一行中任意一个字段为空,就会被删除
dropna(subset = [‘列名’]), 指定当某列出现空值才删除
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.dropna())
结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小强 三级 游泳 21.0 185.0
(4). 填充空值
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
dataFrame['年龄'] = dataFrame['年龄'].fillna(20)
print(dataFrame)
结果:
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 20.0 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
4. 去重
函数 | 作用 |
---|---|
.dropduplicates(subset = 列名列表, keep = 'first' 或 'last') |
删除完全重复行, 可指定某字段重复时删除, 默认保留第一个, 后面重复的会删掉 |
import pandas
dataFrame = pandas.DataFrame(
data=[
['一级', None, 21, 176],
['二级', '游泳', None, 178],
['三级', '游泳', 21, 185],
[None, '游泳', 19, None],
],
columns=['等级', '爱好', '年龄', '身高'],
index=['小明', '小红', '小强', '小于']
)
print(dataFrame)
print(dataFrame.drop_duplicates(subset = ['爱好'], keep = 'first'))
结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
5. 排序
函数 | 作用 |
---|---|
.sort_values(by = 列名, ascending = 是否升序) |
对某列排序 |
import pandas
dataFrame = 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)
结果:
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小红 二级 游泳 NaN 178.0
小强 三级 游泳 21.0 185.0
小于 None 游泳 19.0 NaN
等级 爱好 年龄 身高
小明 一级 None 21.0 176.0
小强 三级 游泳 21.0 185.0
小红 二级 游泳 NaN 178.0
小于 None 游泳 19.0 NaN
6. 分组
分组就是把指定的一列的值相同的分为一组, 调用一些函数对这些指定列值相同数据进行操作
函数 | 作用 |
---|---|
.groupby('列名') |
对指定列分组, 就是把该列值一样的分成一组 |
计算值函数 | 作用 |
---|---|
sum() |
组内求和 |
max() |
组内求最大值 |
min() |
组内求最小值 |
std() |
组内求标准差 |
mean() |
组内求平均数 |
import pandas
dataFrame = 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())
结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 20 178
小强 三级 游泳 21 185
小于 四级 游泳 19 177
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001E4FB3E4730>
身高
年龄
19 177
20 178
21 361
等级 爱好 身高
年龄
19 四级 游泳 177
20 二级 游泳 178
21 三级 读书 185
等级 爱好 身高
年龄
19 四级 游泳 177
20 二级 游泳 178
21 一级 游泳 176
身高
年龄
19 NaN
20 NaN
21 6.363961
身高
年龄
19 177.0
20 178.0
21 180.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())
结果:
等级 爱好 年龄 身高
小明 一级 读书 21 176
小红 二级 游泳 20 178
小强 三级 游泳 21 185
小于 四级 游泳 19 177
小兰 四级 读书 19 165
小智 四级 读书 19 190
年龄
19 532
20 178
21 361
Name: 身高, dtype: int64
7. 分段
函数 | 作用 |
---|---|
cut(x = 切分数据, bins = 切分方式, right = 是否包含右区间, labels = 分割后每段的名字列表) |
对一个数组进行分段 |
import pandas
dataFrame = 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: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']
小明 身高较高
小红 身高很高
小强 身高太高
小于 身高较高
小兰 中等身高
小智 身高太高
Name: 身高, dtype: category
Categories (4, object): ['中等身高' < '身高较高' < '身高很高' < '身高太高']
原文地址:https://blog.csdn.net/qq_37354060/article/details/125024503
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_45780.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!