Python pandas对表格进行整行整列筛选、删除或修改,对特定值进行修改

news2025/2/23 7:06:15

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['性别'] == '女'])

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
123  女  本科

排序数据

.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))

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
343  男  博士
234  男  硕士
123  女  本科
012  男  初中

**.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))

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
343  男  博士
234  男  硕士
123  女  本科
012  男  初中

删除特定的行或列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=['年龄','性别']))

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
  姓名  年龄 性别  学历
012  男  初中
234  男  硕士
343  男  博士
  姓名  年龄  学历
012  初中
123  本科
234  硕士
343  博士
  姓名  学历
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)

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士 

  姓名  年龄 性别  学历  户籍
012  男  初中  北京
123  女  本科  上海
234  男  硕士  广州
343  男  博士  深圳

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)

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士 

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
445  女  博士

新增一行部分列数据

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)

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士 

  姓名    年龄   性别  学历
012.0    男  初中
123.0    女  本科
234.0    男  硕士
343.0    男  博士
4  戊   NaN  NaN  博士

数据类型转换及描述统计

Python数据处理工具 ——Pandas(数据的预处理)

# 查看数据的行列数
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())

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
和: 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())

结果:

  姓名  年龄 性别  学历
012  男  初中
123  女  本科
234  男  硕士
343  男  博士
累加:
 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1253364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware虚拟机网络配置详解

vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式) 打开vmware虚拟机,我们可以在选项栏的“编辑”下的…

U盘报错无法访问文件或目录损坏且无法读取

使用电脑打开U盘的部分文件时提示无法访问,文件或目录损坏且无法读取 报错内容如下图: 因为我这个U盘是那种双接口的 Type-C和USB,前段时间被我摔了一下 看网上说这种双接口的U盘USB接口容易坏掉 尝试在手机上使用OTG打开,先测试…

二叉树详讲(一)---完全二叉树、满二叉树、堆

1.树的概念及其结构 1.1树的概念 树是一种非线性数据结构,是一种种抽象数据类型,旨在模拟具有树状结构的节点之间的层次关系。一颗树由诺干个点和诺干条边组成。每棵树只有一个根节点,根节点向下延申又有子节点和叶子节点,叶子节…

Linux 命令vim(编辑器)

(一)vim编辑器的介绍 vim是文件编辑器,是vi的升级版本,兼容vi的所有指令,同时做了优化和延伸。vim有多种模式,其中常用的模式有命令模式、插入模式、末行模式:。 (二)vim编辑器基本操作 1 进入vim编辑文件 1 vim …

Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

【代码】考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度matlab-yalmip-cplex/gurob

程序名称:考虑电解槽变载启停特性与阶梯式碳交易机制的综合能源系统优化调度 实现平台:matlab-yalmip-cplex/gurobi 代码简介:提出了一种考虑 变载启停特性的电解槽混合整数线性模型,根据电 氢负荷可以实时调整设备工作状态&…

android系统新特性——用户界面以及系统界面改进

用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言,它是一套完整的设计系统,包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述,让开发者设计出更符合目标的软件&#xff0c…

代码随想录算法训练营 ---第四十三天

前言: 今天同样是01背包问题,今天详细学习了背包问题在各种场景下的应用。今天一道也没做出来,有点废。好难啊!就是思路不太清晰,不知道如何去做,看了题解后感觉原来如此,但是想不出来。今天做…

蓝桥杯官网算法赛(蓝桥小课堂)

问题描述 蓝桥小课堂开课啦! 海伦公式(Herons formula),也称为海伦-秦九韶公式,是用于计算三角形面积的一种公式,它可以通过三条边的长度来确定三角形的面积,而无需知道三角形的高度。 海伦公…

②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Sharding-JDBC Sharding-JDBC介绍使用 Shardin…

cmake install接口常用方式介绍

cmake install接口常用方式介绍 1 Synopsis2 Introduction2.1 DESTINATION <dir>2.2 PERMISSIONS <permission>...2.3 CONFIGURATIONS <config>...2.4 COMPONENT <component>2.5 EXCLUDE_FROM_ALL2.6 RENAME <name>2.7 OPTIONAL 3 Signatures4 E…

<JavaEE> 线程的五种创建方法 和 查看线程的两种方式

目录 一、线程的创建方法 1.1 继承 Thread -> 重写 run 方法 1.2 使用匿名内部类 -> 继承 Thread -> 重写 run 方法 1.3 实现 Runnable 接口 -> 重写 run 方法 1.4 使用匿名内部类 -> 实现 Runnable 接口 -> 重写 run 方法 1.5 使用 lambda 表达式 二…

Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

目录 面试官&#xff1a;redis做为缓存&#xff0c;数据的持久化是怎么做的&#xff1f; 面试官&#xff1a;这两种持久化方式有什么区别呢&#xff1f; 面试官&#xff1a;这两种方式&#xff0c;哪种恢复的比较快呢&#xff1f; 面试官&#xff1a;redis做为缓存&#xff…

Element-Plus 图标自动导入

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【RTP】RTPSenderAudio::SendAudio

RTPSenderAudio 可以将一个opus帧封装为rtp包进行发送,以下是其过程:RTPSenderAudio::SendAudio :只需要提供payload部分 创建RtpPacketToSend 并写入各个部分 填充payload部分 sender 本身分配全session唯一的twcc序号 if (!rtp_sender_->

终端移动性管理

联系前面所学的知识我们知道&#xff0c;移动性管理主要分为两大类&#xff1a;空闲状态下的移动性管理、连接状态下的移动性管理。我们今天来详细了解他们的工作原理~ 目录 移动性管理分类 1、空闲状态下的移动性管理 2、连接状态下的移动性管理 手机选择天线的原则 4G天…

香港站群服务器中1C/2C/4C/8C 的概念及区别

​  在选择香港站群服务器时&#xff0c;经常会看到1C、2C、4C和8C等不同的IP段。这些IP段代表了不同的子网掩码长度&#xff0c;也反映了服务器的IP地址数量和丰富性。 让我们来了解一下什么是IP段。IP段是指一组连续的IP地址&#xff0c;其中每个地址的前三个数字相同&…

从0到0.01入门 Webpack| 006.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

在 Go 中使用 Protocol Buffers

各位准备好了吗&#xff01;这一次&#xff0c;我们将深入探讨 Protocol Buffers&#xff08;protobuf&#xff09;及其在数据序列化中的超能力所在。 介绍 Protocol Buffers&#xff0c;也被称为 protobuf&#xff0c;是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

牛客 算法 HJ103 Redraiment的走法 golang语言实现

题目 HJ103 Redraiment的走法 实现 package mainimport ("bufio""fmt""os""strconv""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)nums : make([]int, 0)nums_len:0dp:make([]int, 0)for scanner.Scan()…