首页 > Python资料 博客日记
Python pandas对表格进行整行整列筛选、删除或修改,对特定值进行修改
2024-05-16 10:00:04Python资料围观291次
Pandas库的使用
Pandas库:从入门到应用(二)–行列数据读写
Python数据处理工具 ——Pandas(数据的预处理)
Pandas库有两个数据类型: Series, DataFrame
- Series = 索引 + 一维数据
- DataFrame = 行列索引 + 二维数据
DataFrame类型
DataFrame类型介绍
- DataFrame类型由共用相同索引的一组列组成。
- DataFrame是一个表格型的数据类型,每列值类型可以不同。
- DataFrame既有行索引(index)、也有列索引(column)。
- DataFrame常用于表达二维数据,但可以表达多维数据。
筛选数据
如何利用pandas进行数据查询(筛选)
可以使用布尔索引来筛选数据。
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'], "学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 筛选年龄大于30的数据
print(df[df['年龄'] > 30])
# 筛选出性别为女的数据
print(df[df['性别'] == '女'])
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
1 乙 23 女 本科
排序数据
.sort_index() 方法根据行索引进行排序,默认升序。
.sort_index(axis=0, ascending=True)
举例
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','女','男','男'],
"学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 升序排序
print(df.sort_index())
# 降序排序
print(df.sort_index(ascending=False))
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
3 丁 43 男 博士
2 丙 34 男 硕士
1 乙 23 女 本科
0 甲 12 男 初中
**.sort_values()**方法在指定轴上根据数值进行排序,默认升序。
DataFrame.sort_values(by, axis=0, ascending=True) # by: 列索引,默认axis=0可以不写
举例
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'],"学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 按照年龄升序排序
print(df.sort_values('年龄'))
# 按照年龄降序排序
print(df.sort_values('年龄', ascending=False))
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
3 丁 43 男 博士
2 丙 34 男 硕士
1 乙 23 女 本科
0 甲 12 男 初中
删除特定的行或列drop()
【pandas】drop()函数详解
.drop() 能够删除DataFrame指定行或列索引
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
- labels:待删除的行名or列名;
- axis:删除时所参考的轴,0为行,1为列;
- index:待删除的行名
- columns:待删除的列名
- level:多级列表时使用,暂时不作说明
- inplace:布尔值,默认为False,这是返回的是一个copy;若为True,返回的是删除相应数据后的版本
- errors:一般用不到,这里不作解释
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'], "学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 删除第二行
print(df.drop(1))
# 删除”性别“列
print(df.drop('性别', axis=1))
# 同时删除行数据和列数据
print(df.drop(index=[0,3], columns=['年龄','性别']))
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
0 甲 12 男 初中
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 学历
0 甲 12 初中
1 乙 23 本科
2 丙 34 硕士
3 丁 43 博士
姓名 学历
1 乙 本科
2 丙 硕士
python中删除表格中常用的方法是DataFrame.drop()函数,DataFrame.drop()常用的操作是删除一整行或者删除某一整列。对于删除某一列满足条件的所有行操作暂不支持;此时用 isin 效果理想。
python 筛选出或者删除某一列满足条件的所有行
python:按列条件筛选、删除DataFrame中满足列条件的行
新增列或行
Python Pandas多种添加行列数据方法总结
Pandas怎么增加一行列?Python如何用pandas给表格增加列
Pandas提供了多种添加列数据的方法,常见的方法有如下几种:
- df[‘new_column_name’] =Series/Array:在df末尾添加一列Series/Array数据,并且以new_column_name作为新建列的列名。
- df.insert(loc, column,value):在df的第loc列插入一列数据,并且以column作为新建列的列名,value为新建列的数据。
- df.join(df2):将df2中的数据(DataFrame/Series)按照预设的方式加入到df中,可以设定df2的源df(left/right)。
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'],"学历":['初中','本科','硕士','博士']})
print(df, '\n') #构建表格格式
# 新增户籍列
df['户籍'] = pd.Series(['北京','上海','广州','深圳'])
print(df)
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历 户籍
0 甲 12 男 初中 北京
1 乙 23 女 本科 上海
2 丙 34 男 硕士 广州
3 丁 43 男 博士 深圳
Pandas提供了多种添加行数据的方法,常见的方法有如下几种:
- df.loc[len(df)] = Series/Array:在df的最后一行添加一条Series/Array数据。
- df.append(Series/Dict/DF):在df的最后一行添加一条Series/Dict/DF数据。
- df.loc[n] = Series/Array:在df的第n行添加一条Series/Array数据(注意:n不能大于len(df))。
- df[pd.RangeIndex(start=1, stop=n)] = DataFrame:在df的最后一行添加一个DataFrame,并且这个DataFrame的数量必须与原始的df的列数相同。
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'],"学历":['初中','本科','硕士','博士']})
print(df, '\n') #构建表格格式
# 新增行
df = df.append(pd.Series(['戊','45','女','博士'], index=['姓名', '年龄', '性别', '学历']), ignore_index=True)
print(df)
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
4 戊 45 女 博士
新增一行部分列数据
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43],
"性别":['男','女','男','男'],"学历":['初中','本科','硕士','博士']})
print(df, '\n') #构建表格格式
# 新增行
df = df.append(pd.Series(['戊','博士'], index=['姓名', '学历']), ignore_index=True)
print(df)
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
姓名 年龄 性别 学历
0 甲 12.0 男 初中
1 乙 23.0 女 本科
2 丙 34.0 男 硕士
3 丁 43.0 男 博士
4 戊 NaN NaN 博士
数据类型转换及描述统计
# 查看数据的行列数
print('数据集的行列数:\n',sec_cars.shape)
# 查看数据集每个变量的数据类型
print('各变量的数据类型:\n',sec_cars.dtypes)
# 数据的描述性统计
print('各变量的数据的描述性分析(基本的统计量(如最小值、均值、中位数、最大值等)):\n',sec_cars.describe())
数据的基本统计分析
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','女','男','男'],
"学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 计算年龄的和
print('和:', df['年龄'].sum())
# 计算非空值的个数
print('非空值的个数:', df['年龄'].count())
# 计算年龄的算术平均值/平均数。均值也就是平均数,有时也称为算术平均数
print('平均数:', df['年龄'].mean())
# 计算年龄的中位数
print('中位数:', df['年龄'].median())
# 计算年龄的标准差
print('标准差:', df['年龄'].std())
# 计算年龄的方差
print('方差:', df['年龄'].var())
# 计算年龄的最小值
print('最小值:', df['年龄'].min())
# 计算年龄的最小值
print('最大值:', df['年龄'].max())
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
和: 112
非空值的个数: 4
平均数: 28.0
中位数: 28.5
标准差: 13.4412301024373
方差: 180.66666666666666
最小值: 12
最大值: 43
数据的累计统计分析
累计统计分析函数能对序列中的前1—n个数进行累计运算,可减少for循环的使用,使得数据的运算变得更加灵活。
cumsum是matlab中一个函数,通常用于计算一个数组各行的累加值
cumsum()函数的使用
import pandas as pd
df = pd.DataFrame(data={"姓名":['甲','乙','丙','丁'],"年龄":[12,23,34,43], "性别":['男','女','男','男'],
"学历":['初中','本科','硕士','博士']})
print(df) #构建表格格式
# 计算年龄的累加
print('累加:\n', df['年龄'].cumsum())
结果:
姓名 年龄 性别 学历
0 甲 12 男 初中
1 乙 23 女 本科
2 丙 34 男 硕士
3 丁 43 男 博士
累加:
0 12
1 35
2 69
3 112
Name: 年龄, dtype: int64
cumsum
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]))
print(df) #构建表格格式
# 参数axis=0指的是按行累加,即本行=本行+上一行
b = df.cumsum(axis=0)
print(b)
# 参数axis=1指的是按列相加,即本列=本列+上一列
c = df.cumsum(axis=1)
print(c)
结果:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
0 1 2
0 1 2 3
1 5 7 9
2 12 15 18
0 1 2
0 1 3 6
1 4 9 15
2 7 15 24
cumprod
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]))
print(df) #构建表格格式
# 参数axis=0指的是按行累积,即本行=本行*上一行
b = df.cumprod(axis=0)
print(b)
# 参数axis=1指的是按列累积,即本列=本列*上一列
c = df.cumprod(axis=1)
print(c)
结果:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
0 1 2
0 1 2 3
1 4 10 18
2 28 80 162
0 1 2
0 1 2 6
1 4 20 120
2 7 56 504
cummax、cummin
返回一个DataFrame或Series轴上的累积最大值、最小值。
cummax(axis=None, skipna=True, *args, **kwargs)
若要在操作中包含NA值,请使用skipna=False
import pandas as pd
df = pd.DataFrame({"A":[5, 3, 0, 4],
"B":[1, 2, 4, 3],
"C":[4, 1, 8, 2],
"D":[5, 4, 2, 10]})
print(df, '\n') #构建表格格式
# 参数axis=0,给出行的最大值
b = df.cummax(axis = 0)
print(b)
# 参数axis=1,给出列的最大值
c = df.cummax(axis = 1)
print(c, '\n')
# 参数axis=0,给出行的最小值
d = df.cummin(axis=0)
print(d)
# 参数axis=1,给出列的最小值
e = df.cummin(axis=1)
print(e)
结果:
A B C D
0 5 1 4 5
1 3 2 1 4
2 0 4 8 2
3 4 3 2 10
A B C D
0 5 1 4 5
1 5 2 4 5
2 5 4 8 5
3 5 4 8 10
A B C D
0 5 5 5 5
1 3 3 3 4
2 0 4 8 8
3 4 4 4 10
A B C D
0 5 1 4 5
1 3 1 1 4
2 0 1 1 2
3 0 1 1 2
A B C D
0 5 1 1 1
1 3 2 1 1
2 0 0 0 0
3 4 3 2 2
Python3:pandas中的移动窗口函数rolling的用法
rolling().sum()
首先我们设置的窗口window=5,也就是5个数取一个和。index 0,1 ,2,3为NaN,是因为它们前面都不够5个数。等到index4 的时候,它的值是怎么算的呢,index4 = index0+index1+index2+index3+index4
import pandas as pd
df = pd.DataFrame({"A":[5, 3, 0, 4],
"B":[1, 2, 4, 3],
"C":[4, 1, 8, 2],
"D":[5, 4, 2, 10]})
print(df, '\n') #构建表格格式
b = df.rolling(2).sum()
print(b)
结果:
A B C D
0 5 1 4 5
1 3 2 1 4
2 0 4 8 2
3 4 3 2 10
A B C D
0 NaN NaN NaN NaN
1 8.0 3.0 5.0 9.0
2 3.0 6.0 9.0 6.0
3 4.0 7.0 10.0 12.0
设置的窗口window=2,也就是2个数取一个和。index1 = index0+index1
数据的相关分析
import pandas as pd
df = pd.DataFrame({"A":[5, 3, 0, 4],
"B":[1, 2, 4, 3],
"C":[4, 1, 8, 2],
"D":[5, 4, 2, 10]})
print(df, '\n') #构建表格格式
b = df.cov()
print('协方差矩阵:\n', b)
结果:
A B C D
0 5 1 4 5
1 3 2 1 4
2 0 4 8 2
3 4 3 2 10
协方差矩阵:
A B C D
A 4.666667 -2.333333 -4.666667 4.666667
B -2.333333 1.666667 2.166667 -0.500000
C -4.666667 2.166667 9.583333 -6.250000
D 4.666667 -0.500000 -6.250000 11.583333
相关系数
corr()函数的用法
其中corr()函数的参数为空时,默认使用的参数为pearson.
- pearson:相关系数来衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差。
- spearman:非线性的,非正太分析的数据的相关系数
- kendall:用于反映分类变量相关性的指标,即针对无序序列的相关系数,非正太分布的数据
import pandas as pd
df = pd.DataFrame({"A":[5, 3, 0, 4],
"B":[1, 2, 4, 3],
"C":[4, 1, 8, 2],
"D":[5, 4, 2, 10]})
print(df, '\n') #构建表格格式
print('pearson相关系数矩阵:\n', df.corr(method='pearson'))
print('spearman相关系数矩阵:\n', df.corr(method='spearman'))
print('kendall相关系数矩阵:\n', df.corr(method='kendall'))
结果:
A B C D
0 5 1 4 5
1 3 2 1 4
2 0 4 8 2
3 4 3 2 10
pearson相关系数矩阵:
A B C D
A 1.000000 -0.836660 -0.697823 0.634726
B -0.836660 1.000000 0.542137 -0.113796
C -0.697823 0.542137 1.000000 -0.593205
D 0.634726 -0.113796 -0.593205 1.000000
spearman相关系数矩阵:
A B C D
A 1.0 -0.8 -0.2 0.8
B -0.8 1.0 0.4 -0.4
C -0.2 0.4 1.0 -0.4
D 0.8 -0.4 -0.4 1.0
kendall相关系数矩阵:
A B C D
A 1.000000 -0.666667 0.000000 0.666667
B -0.666667 1.000000 0.333333 -0.333333
C 0.000000 0.333333 1.000000 -0.333333
D 0.666667 -0.333333 -0.333333 1.000000
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程