python—pandas基础(2)

news2024/11/24 19:39:00

文章目录

    • 列操作
      • 修改变量列
      • 筛选变量列
        • 使用.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.coloradmin.cn/o/1953121.html

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

相关文章

如何在宝塔面板给域名配置 SSL 证书

首先需要有证书 这里以阿里云为例 1. 首先进入到 SSL 证书管理控制台 选择个人测试证书&#xff0c;并点击购买 免费的可以使用三个月。 购买完成之后回到控制台。 点击创建证书&#xff0c;将标红的地方填写&#xff0c;其他默认就好。 然后提交审核就行。 这里需要对域名…

JS逆向高级爬虫

JS逆向高级爬虫 JS逆向的目的是通过运行本地JS的文件或者代码,以实现脱离他的网站和浏览器,并且还能拿到和浏览器加密一样的效果。 10.1、编码算法 【1】摘要算法&#xff1a;一切从MD5开始 MD5是一个非常常见的摘要(hash)逻辑. 其特点就是小巧. 速度快. 极难被破解. 所以,…

图像生成中图像质量评估指标—FID介绍

文章目录 1. 背景介绍2. 实际应用3. 总结和讨论 1. 背景介绍 Frchet Inception Distance&#xff08;\textbf{FID}&#xff09;是一种衡量生成模型性能的指标&#xff0c;它基于Inception网络提取的特征来计算模型生成的图像与真实图像集合之间的距离。 FID利用了Inception模…

repo中的default.xml文件project name为什么一样?

文章目录 default.xml文件介绍为什么 name 是一样的&#xff0c;path 不一样&#xff1f;总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中&#xff0c;定义了多个 project 元素&#xff0c;每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…

64.隐藏指定模块

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;63.利用PEB获取模块列表 效果图&#xff1a; 隐藏模块简单实现&#xff1a; #include …

苍穹外卖浏览器前端界面修改

背景&#xff1a; 客户原始方案是期望做一个Spring Boot Vue的饿了么系统&#xff0c;但时间上太仓促&#xff0c;所以建议选择开源的苍穹外码目作为作业提交。 客户接受了建议的方案后&#xff0c;期望对前端页面做一些个性化的定制修改。 过程&#xff1a; 苍穹外卖简单介…

【C++进阶】C++11特性(上)

1、统一列表初始化 1.1 {}初始化 C98的特性用{}统一初始化数组或结构体。 //{}初始化 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; } C11则扩大其特性&#xff0c;可以不带进行初始化&…

【SQL 新手教程 2/20】关系模型 -- 主键

&#x1f497; 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record)&#xff1a; 表的每一行称为记录&#xff08;Record&#xff09;&#xff0c;记录是一个逻辑意义上的数据 字段 (Column)&#xff1a;表的每一列称为字段&#xff08;Colu…

基于STM32F103的FreeRTOS系列(四)·FreeRTOS资料获取以及简介

目录 1. FreeRTOS简介 1.1 FreeRTOS介绍 1.2 为何选择FreeRTOS 1.3 FreeRTOS资料获取 1.3.1 官网下载 1.3.2 Github下载 1.3.3 托管网站下载 1.4 FreeRTOS的编程风格 1.4.1 数据类型 1.4.2 变量名 1.4.3 函数名 1.4.4 宏 1. FreeRTOS简介 1.1 Free…

IEC104转BACnet网关:实现电力监控与楼宇自动化的无缝对接

在电力监控和楼宇自控领域&#xff0c;IEC104和BACnet作为两种重要的通信协议扮演着重要的角色。随着不同系统之间的数据交换与集成需求的不断增长&#xff0c;深圳市钡铼技术有限公司推出IEC104转BACnet网关来实现这两种协议之间的无缝转换&#xff0c;助力电力监控和楼宇自控…

如何知道一个字段在selenium中是否可编辑?

这篇文章将检查我们如何使用Java检查selenium webdriver中的字段是否可编辑。 我们如何知道我们是否可以编辑字段&#xff1f;“readonly”属性控制字段的可编辑性。如果元素上存在“readonly”属性&#xff0c;则无法编辑或操作该元素或字段。 因此&#xff0c;如果我们找到一…

3.5-RNN文本生成

1语言模型生成文本的顺序 前面我们已经能够实现使用下图的LSTM网络进行语言建模&#xff1b; 对于一个已经在语料库上学习好的LSTM模型&#xff1b;如果语料库就只是you say goobye and i say hello&#xff1b;那么当把单词i输入到模型中&#xff0c;Time xxx层的第一个LSTM…

⌈ 传知代码 ⌋ 深度学习革新音乐转录

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

SpringBoot上传文件大小超出范围捕获异常

文件上传中&#xff0c;可以限定文件大小&#xff0c;防止用户上传过大的文件&#xff0c;但是出现异常会报错&#xff0c;不够优雅 这里做异常捕获&#xff0c;然后自定义提示文字&#xff0c;可以更加优雅的解决文件上传超出限制报异常 /*** 上传文件超出大小限制异常 适用于…

微信公众号获取用户openid(PHP版,snsapi_base模式)

微信公众号获取用户openid的接口有2个&#xff1a;snsapi_base、snsapi_userinfo 详情见微信公众号开发文档&#xff1a;https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 本文介绍用PHP方式调用snsapi_base接口获取微信用户…

Godot入门 02玩家1.0版

添加Node2D节点&#xff0c;重命名Game 创建玩家场景&#xff0c;添加CharacterBody2D节点 添加AnimatedSprite2D节点 从精灵表中添加帧 选择文件 设置成8*8 图片边缘模糊改为清晰 设置加载后自动播放&#xff0c;动画循环 。动画速度10FPS&#xff0c;修改动画名称idle。 拖动…

Spark实时(六):Output Sinks案例演示

文章目录 Output Sinks案例演示 一、​​​​​​​File sink 二、​​​​​​​​​​​​​​Memory Sink 三、​​​​​​​​​​​​​​Foreach Sink 1、​​​​​​​foreachBatch 2、​​​​​​​​​​​​​​foreach Output Sinks案例演示 当我们对流式…

HarmonyOS NEXT星河版零基础入门到实战

文章目录 一、HarmonyOS NEXT介绍学习内容1、鸿蒙APP开发2、能力套件开发3、全场景开发适合人群 持续更新中✒️总结 一、HarmonyOS NEXT介绍 放弃安卓框架之后&#xff0c;HarmonyOS NEXT成为真正独立于安卓、iOS的操作系统&#xff0c;堪称是一场史无前例的脱胎换骨。在其众多…

模拟依赖关系和 AI 是Vue.js测试的下一个前沿领域

Vue.js 是一个流行的 JavaScript 框架&#xff0c;因此&#xff0c;确保其组件按预期工作至关重要&#xff1a;有效&#xff0c;更重要的是&#xff0c;可靠。模拟依赖项是最有效的测试方法之一&#xff0c;我们将在本文中发现。 模拟依赖项的必要性 模拟依赖项是一种对测试施加…

大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…