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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Echarts 创建饼状图-入门实例

安装 npm install echartsmain.js 引入 import *as echarts from echarts Vue.prototype.$echarts echarts定义容器 <div ref"myChart" style"width: 500px; height: 500px;"></div>option 为配置项 成品 <script>export default {na…

R语言期末复习一

创建一个长度为7的字符向量&#xff0c;元素为"A", "B", "C", "D", "E", "F", "G"&#xff0c;并命名为vec1。 创建一个因子&#xff0c;包含6个水果&#xff1a;"apple", "banana"…

Day41力扣打卡

打卡记录 第 N 位数字&#xff08;找规律&#xff09; 链接 class Solution:def findNthDigit(self, n: int) -> int:count, digit, start 9, 1, 1while n > count:n - countdigit 1start * 10count start * 9 * digitnum start (n - 1) // digitreturn int(str(n…

Linux学习笔记之六(进程之间的管道通信和信号处理)

目录 1、管道通信1.1、无名管道1.1、有名管道 2、信号处理2.1、信号的种类和发送2.2、信号的接受和处理 1、管道通信 管道通信是一个设备中进程与进程之间通信的一种方式&#xff0c;分为无名管道和有名管道两种。前者只能用于有亲缘关系的进程之间的通信&#xff0c;如父子进…

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

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

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法

20231125硬盘电源线5线不能识别日立10T的硬盘的解决方法 2023/11/25 23:00 缘起&#xff0c;在拼多多买了2片10TB的7200rpm的日立二手硬盘。 型号&#xff1a;日立 mar-2018 10T硬盘 接上电脑&#xff0c;硬盘感觉在转动了【正常上电了。】 但是X99主板&#xff0c;在WIN10下就…

人工智能面面观

人工智能简介 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域。它致力于开发能够感知、理解、学习、推理、决策和与人类进行交互的智能系统。人工智能的背景可以追溯到上世纪50…

DeepWalk代码实战-维基百科词条图嵌入可视化

准备工作&#xff1a; 从爬虫网站中爬取维基百科See also关联词条&#xff1a;https://densitydesign.github.io/strumentalia-seealsology/ 维基百科网站&#xff1a;https://www.wikipedia.org/ 爬取过程&#xff1a; 下载 tsv 文件&#xff1a; import networkx as nx # 图…

详解#define

我们要知道&#xff0c;#define后面定义的标识符只进行替换而不进行计算&#xff0c;我们不能根据惯性自动给它计算了&#xff0c;这样可能会出错。 目录 1.关于#define 1.1#define定义标识符 1.2#define定义宏 1.3#define的替换规则 2.#和## 1.# 2.## 3.带副作用的宏参…

信息收集小练习

信息收集小练习 本文章无任何恶意攻击行为&#xff0c;演示内容都合规无攻击性 演示如何绕过cdn获取真实ip 使用多地ping该网站 发现有很多ip地址&#xff0c;证明有cdn 此处使用搜索引擎搜索&#xff0c;得到ip 演示nmap工具的常用参数 此处以testfire.net为例 使用多地p…

Android逆向实战 - MIUI调起三方应用系统拦截弹窗分析

近期&#xff0c;发现在部分Android手机调起其他应用时&#xff0c;会弹出一个系统弹窗拦截调起&#xff0c;需要用户二次确认。经过内部众测&#xff0c;发现绝大多数是小米手机&#xff0c;而且跟Android版本没有直接关系&#xff0c;猜测是MIUI某次升级引入的功能。这篇文章…

OpenCV入门教程

本文旨在让你快速入门opencv。 OpenCV OpenCV是计算机视觉中最受欢迎的库&#xff0c;最初由intel使用C和C 进行开发的&#xff0c;现在也可以在python中使用。该库是一个跨平台的开源库&#xff0c;是免费使用的。OpenCV库是一个高度优化的库&#xff0c;主要关注实时应用程…

Another app is currently holding the yum lock; waiting for it to exit...

今天使用yum进行下载的时候报错 解决办法&#xff1a; 执行 rm -f /var/run/yum.pid 然后重新运行yum指令即可&#xff0c;发现已经可以正常下载啦&#xff01;

VScode

一、VSCode设置中文 1、首先我们打开vscode&#xff0c;进入编辑页面后点击左边栏的图示图标进入“EXTENSIONS”面板 2、进入后&#xff0c;在上方搜索“Chinese”&#xff0c;搜索到中文&#xff08;简体&#xff09;后&#xff0c;点击“install”按钮。 3、等待自动下载安装…

STK Components 基础篇

1.开发包 STK Components 访问AGI官网&#xff0c;注册并登录后&#xff0c;从官网下载开发包&#xff1a;https://support.agi.com/downloads/&#xff0c;下载成功后可以申请许可证&#xff0c;AGI会向你注册的邮箱地址发送有效期半年的使用授权许可文件&#xff08;lic文件…

基于 STM32 的温度测量与控制系统设计

本文介绍了如何基于 STM32 微控制器设计一款温度测量与控制系统。首先&#xff0c;我们将简要介绍 STM32 微控制器的特点和能力。接下来&#xff0c;我们将详细讨论温度传感器的选择与接口。然后&#xff0c;我们将介绍如何使用 STM32 提供的开发工具和相关库来进行温度测量和控…

ubuntu20.04配置OpenCV的C++环境

ubuntu20.04配置OpenCV的C环境 这里以opencv-3.4.16为例 复现https://github.com/raulmur/ORB_SLAM2此项目&#xff0c;需安装opencv及其他依赖&#xff0c;可见README.md详情 1.下载opencv源代码 https://opencv.org/releases/ 2.下载OpenCV的扩展包opencv_contrib&#x…

排序算法-----基数排序

目录 前言 基数排序 算法思想 ​编辑 算法示例 代码实现 1.队列queue.h 头文件 2.队列queue.c 源文件 3.主函数&#xff08;radix_sort实现&#xff09; 算法分析 前言 今天我想把前面未更新完的排序算法补充一下&#xff0c;也就是基数排序的一种&#xff0c;这是跟…

小程序如何禁止指定用户访问?如何设置指定用户才能访问?

​有些商家为了价格保密或者实行严格的会员制等原因&#xff0c;希望小程序能够限制某些人的访问或者设置指定人员才能访问。这种功能在小程序中&#xff0c;怎么支持这些功能呢&#xff1f;下面具体介绍。 一、禁止指定用户访问 禁止指定用户访问&#xff0c;可以通过小程序…

【三极管锯齿波电路】2022-3-23

缘由以晶体管作恒流源的锯齿波电路工作原理? - 24小时必答区