python—pandas基础(2)

文章目录

    • 列操作
      • 修改变量列
      • 筛选变量列
        • 使用.loc[](基于标签)
        • 使用.iloc[](基于整数位置)
        • 使用.filter()方法
      • 删除变量列
      • 添加变量列
    • 变量类型的转换
      • Pandas 支持的数据类型
      • 在不同数据类型间转换
    • 建立索引
      • 新建数据框时建立索引
      • 读入数据时建立索引
      • 指定某列为索引列
      • 将索引还原变量列
    • 引用和修改索引
      • 引用索引
      • 修改索引
      • 修改索引值
    • 更新索引
      • isin()选择
      • query()的使用
      • 排序
      • 用索引排序
      • 使用变量值排序
    • 通过索引进行排序
    • 修改替换变量值
      • 对应数值的替换
      • 指定数值范围的替换

Pandas 是 Python 中一个非常强大的数据处理库,它提供了高性能、易用的数据结构和数据分析工具。下面我将继续详细解释 Pandas 的基本概念和常用功能。

列操作

在这里插入图片描述

修改变量列

在Pandas中,如果你想要修改DataFrame或Series中的变量名(即列名),你可以使用.rename()方法。这个方法提供了灵活的方式来重命名列名或索引名。

df = df.rename(columns={'old_name1': 'new_name1', 'old_name2': 'new_name2'},inplace = True)

筛选变量列

你可以直接通过列名来访问或选择DataFrame中的列。如果你想要选择多个列,可以将它们放在列表中。

# 假设df是你的DataFrame  # 选择单个列  
column_data = df['column_name']  # 这将返回一个Series  # 选择多个列  
columns_data = df[['column1', 'column2']]  # 这将返回一个DataFrame
使用.loc[](基于标签)

.loc[]方法允许你通过标签来选择行和列。当用于列选择时,你可以只传递列名的列表(或单个列名)作为第二个参数(如果你同时选择行,则第一个参数是行索引)。

# 选择多个列  
columns_data = df.loc[:, ['column1', 'column2']]  # 冒号`:`表示选择所有行
使用.iloc[](基于整数位置)

虽然.iloc[]主要用于基于整数位置选择行和列,但如果你知道列的确切位置,你也可以使用它来选择列。然而,这种方法不如直接使用列名那么直观或灵活。

# 假设你知道'column1'是第一列,'column2'是第二列  
columns_data = df.iloc[:, [0, 1]]  # 选择前两列
使用.filter()方法
# 选择所有以'col'开头的列  
filtered_data = df.filter(regex='^col')  # 或者,使用lambda函数(尽管对于列选择来说,这通常不如regex直接)  
# filtered_data = df.filter(lambda x: 'some_condition' in x, axis=1)  
# 注意:这里的lambda示例可能需要调整以适应具体的筛选条件

删除变量列

df.drop(columns =['col1','col2']del df['column-name'] #直接删除原数据框相应的一列,建议尽量少用
del df.column_name #不允许

添加变量列

#根据新数据添加
df[cloumn] = pd.Series([val,val2,val3],index=[c1,c2,c3])
#根据原数据添加
df[cloumn] = df[c2]+df[c3]

变量类型的转换

在这里插入图片描述

Pandas 支持的数据类型

具体类型是 Python, Numpy 各种类型的混合,可以比下表分的更细

  • float:Pandas中浮点数的默认类型是float64,用于存储小数。
  • int:Pandas中整数的默认类型是int64,可以存储较大的整数。在32位系统上,NumPy可能会使用int32,但Pandas在创建DataFrame时通常使用int64。
  • bool:布尔类型用于表示真(True)和假(False)的逻辑值。
  • datetime64[nsr] :用于表示日期和时间,精度为纳秒(ns)。这是Pandas中处理日期和时间的主要类型。
  • timedelta[ns]:表示两个时间点之间的时间差,精度同样为纳秒(ns)。
  • category:分类类型是一种特殊的数据类型,用于表示具有有限数量唯一值的列。它可以大大减少内存使用,并提高性能。分类类型非常适合于表示如性别、地区等分类变量。
  • object:在Pandas中,字符串实际上是以object类型存储的。虽然object类型可以存储任何Python对象,但通常用于存储字符串数据。
    df.dtypes :査看各列的数据类型
df.dtypes

在不同数据类型间转换

在Pandas中,你可以使用astype()方法或Pandas提供的特定函数(如pd.to_numeric(), pd.to_datetime()等)来转换数据类型。以下是一些常见的数据类型转换方法:

import pandas as pd  # 创建一个示例DataFrame  
df = pd.DataFrame({  'A': ['1', '2', '3', '4'],  # 字符串形式的数字  'B': ['a', 'b', 'c', 'd'],  # 字符串  'C': [1, 2, 3, 4]  # 整数  
})   
# 使用astype()转换数据类型  
df['A'] = df['A'].astype(int)  # 将列A的字符串转换为整数  
df['B'] = df['B'].astype(str)  # 注意:这实际上没有改变,因为B已经是str类型  
df['C'] = df['C'].astype(float)  # 将列C的整数转换为浮点数  # 尝试将包含非数字的字符串列转换为整数(可能会引发错误或返回NaN)  
# df['B'] = df['B'].astype(int)  # 这会失败,因为'a', 'b', 'c', 'd'不能转换为整数  # 安全地转换,使用errors参数处理无法转换的情况  
df['B_int'] = df['B'].astype(int, errors='coerce')  # 无法转换的将被设置为NaN

建立索引

在这里插入图片描述

新建数据框时建立索引

所有的数据框默认都已经使用从 0 开始的自然数索引,因此这里的"建立”索引指的是自定义索引。

df = pd.DataFrame( {'varl' : 1.0, ' var2' :[1,2,3,4], 'var3' : ['test', 'python','test','hello'], 'var4' : 'cons'} , index =[0,1,2,3])

读入数据时建立索引

使用现有的列

df = pd.read_csv ("filename",index_col="column”)

使用复合列

df = pd.read_csv ("filename", index_col=[0,1..])

指定某列为索引列

在Pandas中,你可以通过set_index()方法将DataFrame中的某一列指定为索引列。这会将该列的值用作行索引,并将该列从DataFrame中移除。

import pandas as pd  # 创建一个示例DataFrame  
data = {'A': ['foo', 'bar', 'baz', 'qux'],  'B': [1, 2, 3, 4],  'C': [5, 6, 7, 8]}  
df = pd.DataFrame(data)  # 打印原始DataFrame  
print("原始DataFrame:")  
print(df)  # 将列'A'设置为索引  
df_indexed = df.set_index('A')  # 打印设置索引后的DataFrame  
print("\n设置索引后的DataFrame:")  
print(df_indexed)

将索引还原变量列

在Pandas中,如果你之前使用set_index()方法将某列设置为DataFrame的索引,并且之后想要将这个索引还原为一个普通的列,你可以使用reset_index()方法。这个方法会将当前的索引重置为默认的整数索引,并将原来的索引列(或列的多级索引)作为一个或多个新列添加到DataFrame中。

import pandas as pd  # 创建一个示例DataFrame  
data = {'A': ['foo', 'bar', 'baz', 'qux'],  'B': [1, 2, 3, 4],  'C': [5, 6, 7, 8]}  
df = pd.DataFrame(data)  # 将列'A'设置为索引  
df_indexed = df.set_index('A')  # 打印设置索引后的DataFrame  
print("设置索引后的DataFrame:")  
print(df_indexed)  # 将索引还原为变量列  
df_reset = df_indexed.reset_index()  # 打印索引还原后的DataFrame  
print("\n索引还原后的DataFrame:")  
print(df_reset)

引用和修改索引

在这里插入图片描述

引用索引

注意:索引仍然是有存储格式的,注意区分数值型和字符型的引用方式

df.index

修改索引

#本质上和变量列名的修改方式相同
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
df.index.name='sno'
df2 = pd.read_excel('stu_data.xlsx')
df3 = df2.set_index(keys = '学号')
df4 = pd.read_excel('stu_data.xlsx')
df5 = df2.set_index(keys = ['学号','性别'])
# df5.index.names = ['no','sex']
df5.index.names=[None,None]
df5

修改索引值

#这里的修改本质上是全部替换
df1.index = ['a', 'b', 'c']

更新索引

在这里插入图片描述reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行/列,同时进行缺失值填充操作。
df.reindex
(labels :类数组结构的数值,将按此数值重建索引,非必需
copy = True :建立新对象而不是直接更改原 df/series 缺失数据的处理方式
method :针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需
pad / ffill:用前面的有效数值填充
backfill / bfill:用后面的有效数值填充
nearest:使用最接近的数值逬行填充
fill_value = np.NaN :将缺失值用什么数值替代
limit = None :向前/向后填充时的最大步长)

import pandas as pd
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
df.reindex([0,1,3])
df.reindex([0,1,2,3],method='ffill')
df.reindex([0,1,2,3],fill_value="test")

isin()选择

在这里插入图片描述
df.isin(values) 返回结果为相应的位置是否匹配给出的 values
values 为序列:对应每个具体值
values 为字典:对应各个变量名称
values 为数据框:同时对应数值和变量名称

df.col.isin([1,3,5])
df[ df.col.isin([1,3,5])]
df[ df.col.isin(['val1','val2'])]
df[ df.index.isin(['val1','val2'])]

query()的使用

在这里插入图片描述
使用boolean值表达式进行筛选
df.query(
expr:语句表达式
inplace=False;是否直接替换原数据框
)
可以使用前缀“@”引用环境变量等号为==,而不是=

df.query("col>10 and col<90 and col1=val")
limit = 5
df.query("col<=@limit & col==val")
df.query("col<=@limit & col!=val")

排序

在这里插入图片描述

用索引排序

df.sort_index(
level :(多重索引时)指定用于排序的级别顺序号/名称18
ascending = True :是否为升序排列,多列时以表形式提供
inplace = False :
na_position = 'last‘ :缺失值的排列顺序,
first/last

df = pd.read_excel("stu_data.xlsx",index_col=["学号”,”性别”]) df.set_index( ['学号','性别'],inplace = True )
# 通过索引进行排序                                             
df.sort_index()                              
df.sort_index(ascending=False)
df.sort_index(ascending = [True,False])
#设置哪个索引进行排序                          
df.sort_index(level="支出")
df.sort_index(level= ["支出","体重"])

使用变量值排序

df.sort_values(
by :指定用于排序的变量名,多列时以列表形式提供
ascending = True :是否为升序排列
inplace = False :
df = pd.read_excel(“stu_data.xlsx”,
index_col=["学号”,”性别”]) df.set_index( [‘学
号’,‘性别’], inplace = True )

通过索引进行排序

df.sort_values(
by :指定用于排序的变量名,多列时以列表形式提供
ascending = True :是否为升序排列
inplace = False :
na_position = 'last‘ :缺失值的排列顺序

# 根据值进行排序
df.sort_values(by='身高')

修改替换变量值

在这里插入图片描述
本质上是如何直接指定单元格的问题,只要能准确定位单元地址,就能够做到准确替换。

# 判断哪一行是我们要的数据
df.体重[1] = 78
df['体重'][1] = 68
df.loc[1,'体重'] = 78
df.开设.isin(['不清楚'])
df.开设[df.开设.isin(['不清楚'])] = '可以'

对应数值的替换

df.replace(
to_replace = None :将被替换的原数值,所有严格匹配的数值将被用 value 替换,可以
str/regex/list/dict/Series/numeric/None
value = None :希望填充的新数值
inplace = False
)

df.开设.replace('可以','不清楚',inplace = True)
df.性别.replace(['女','男'],[0,1],inplace =True)
df.性别.replace({0:'女',1:'男'},inplace =True)

指定数值范围的替换

方法一:使用正则表达式完成替换

df.replace(regex, newvalue)

方法二:使用行筛选方式完成替换,用行筛选方式得到行索引,然后用 loc 命令定位替换,目前也支持直接筛选出单元格进行数值替换。

# 使用正则匹配数据
df.开设.replace(regex = '不.+',value = '可以',inplace = True)
#iloc  loc
df.支出.iloc[0:3] = 20
df.支出.loc[0:2] =30
#条件筛选替换
df.体重[df.体重>70] =70
df[df.体重==70].体重 = 80   # 注意引用问题
#query()的使用
df.query('性别 == "女" and 体重 > 60 ').体重 =50
df.loc[df.query('性别 == "女" and 体重 > 60').体重.index,'体重'] = 50

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

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

相关文章

Vue---vue3+vite项目内使用devtools,快速开发!

背景 我们在前期开发时&#xff0c;一般使用chrome或者edge浏览器&#xff0c;会使用vue-devtools或react-devtools&#xff08;此插件个人未使用&#xff0c;可百度下是否可内嵌入项目&#xff01;&#xff09;来审查vue项目&#xff1b;这个需要安转浏览器插件才可支持&…

使用PyTorch导出JIT模型:C++ API与libtorch实战

PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1&#xff1a;导出模型 首先我们进行第一步&#xff0c;用 Python API 来导出模型&#xff0c;由于本文的重点是在后面的部署…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中&#xff0c;有介绍过前端触发的通知服务。 【odoo】右上角的提示&#xff08;通知服务&#xff09; 此文章则介绍后端触发方法。 内容 直接上代码&#xff1a;但是前提一定是按钮触发&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; def bu…

【css】实现扫光特效

对于要重点突出的元素&#xff0c;我们经常可以看到它上面打了一个从左到右的斜向扫光&#xff0c;显得元素亮闪闪的&#xff01;类似于下图的亮光动效 关键步骤 伪元素设置position :absolute【也可以不用伪元素&#xff0c;直接创建一个absolute元素盖在上面】设置渐变line…

Mike21粒子追踪模型particle tracking如何展示粒子轨迹

前言&#xff1a; 随着模型的推广&#xff0c;模型的很多模块也问的多了起来&#xff0c;PT粒子追踪模块最近群友也在问&#xff0c;结果算了出来&#xff0c;却实现不了展示运动轨迹。今天就写段简单的PT后处理的方法吧。 注意&#xff1a;MIKE21输出模块中不但输出了关于水…

Axure怎么样?全面功能评测与用户体验分析!

软件 Axure 曾经成为产品经理必备的原型设计工具&#xff0c;被认为是专门为产品经理设计的工具。但事实上&#xff0c;软件 Axure 的使用场景并不局限于产品经理构建产品原型。UI/UX 设计师还可以使用 Axure 软件构件应用程序 APP 原型&#xff0c;网站设计师也可以使用 Axure…

如何系统的学习C++和自动驾驶算法

给大家分享一下我的学习C和自动驾驶算法视频&#xff0c;收藏订阅都很高。打开下面的链接&#xff0c;就可以看到所有的合集了&#xff0c;订阅一下&#xff0c;下次就能找到了。 【C面试100问】第七十四问&#xff1a;STL中既然有了vector为什么还需要array STL中既然有了vec…

QSqlQuery增删改查

本文记录使用QSqlQuery实现增删改查的过程。 目录 1. 构建表格数据 声明变量 表格、数据模型、选择模型三板斧设置 列表执行查询 列表的水平表头设置 2. 新增一行 构建一个空行 通过dialog返回的修改行数据&#xff0c;update更新 3. 更新一行 获取到需要更新的行 通…

Spring Bean - xml 配置文件创建对象

类型&#xff1a; 1、值类型 2、null &#xff08;标签&#xff09; 3、特殊符号 &#xff08;< -> < &#xff09; 4、CDATA <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/bea…

信息安全技术解析

在信息爆炸的今天&#xff0c;信息技术安全已成为社会发展的重要基石。随着网络攻击的日益复杂和隐蔽&#xff0c;保障数据安全、提升防御能力成为信息技术安全领域的核心任务。本文将从加密解密技术、安全行为分析技术和网络安全态势感知技术三个方面进行深入探讨&#xff0c;…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃&#xff0c;通过查看崩溃日志如下&#xff1a; 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常&#xff0c;进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

leetcode-105. 从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,nu…

重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州举办。来自全国各地的萤石合作伙伴、行业从业者及相关媒体&#xff0c;共聚杭州&#xff0c;共同见证拥抱AI的萤石&#xff0c;将如何全新升级&#xff0c;AI加持下的智慧生活又有何不同。 发…

【WinDbg读取蓝屏的dmp日志】iaStorAC.sys 蓝屏解决

读取蓝屏日志&#xff1a; Window偶尔一次蓝屏不用管。 经常蓝屏重置或重装系统。 想要知道为什么蓝屏&#xff0c;通过WinDbg查看蓝屏日志。 蓝屏日志查找和配置 1&#xff0c;蓝屏那一刻拍照蓝屏的界面&#xff0c;即可知道基本的蓝屏信息。 2&#xff0c;蓝屏日志的配置…

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程&#xff0c;我们重新开一个坑&#xff0c;就是基于爬取到的数据&#xff0c;搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么&#xff1f; 从0开始搭建一个 vue flask 的数据分析系统&#xff1b;了解系统的整体架构&…

通信类IEEE会议——第四届通信技术与信息科技国际学术会议(ICCTIT 2024)

[IEEE 独立出版&#xff0c;中山大学主办&#xff0c;往届均已见刊检索] 第四届通信技术与信息科技国际学术会议&#xff08;ICCTIT 2024&#xff09; 2024 4th International Conference on Communication Technology and Information Technology 重要信息 大会官网&#xf…

Visual Studio调试Web项目

一、编译运行调试&#xff08;VS快捷键&#xff1a;CtrlF5&#xff09; 缺点&#xff1a;编译运行项目太慢&#xff0c;整体程序有些编译报错运行不了 二、附加到进程调试&#xff08;VS快捷键&#xff1a;CtrlAltP&#xff0c;选择w3wp.exe&#xff09; 无需编译&#xff0c;速…

数据结构之栈详解

1. 栈的概念以及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…

7.23模拟赛总结 [数据结构优化dp] + [神奇建图]

目录 复盘题解T2T4 复盘 浅复盘下吧… 7:40 开题 看 T1 &#xff0c;起初以为和以前某道题有点像&#xff0c;子序列划分&#xff0c;注意到状态数很少&#xff0c;搜出来所有状态然后 dp&#xff0c;然后发现这个 T1 和那个毛关系没有 浏览了一下&#xff0c;感觉 T2 题面…

并发编程--volatile

1.什么是volatile volatile是 轻 量 级 的 synchronized&#xff0c;它在多 处 理器开 发 中保 证 了共享 变 量的 “ 可 见 性 ” 。可 见 性的意思是当一个 线 程 修改一个共享变 量 时 &#xff0c;另外一个 线 程能 读 到 这 个修改的 值 。如果 volatile 变 量修 饰 符使用…