当前位置: 首页 > news >正文

【Pandas】3.1-数据预处理:列的基本操作

在数据分析和建模工作中,​​列的相关操作​​是最基础也是最高频的数据预处理任务之一,例如删除不需要的列、或者一些复杂的条件筛选等。
所以本文以模拟生成的用户数据集为示例,总结Pandas中关于DataFrame列常用的基本操作,包括​​列的新增、删除、修改、重命名​​以及​​条件筛选​​。

首先生成一份数据集用于演示:

import numpy as np
import pandas as pd# 生成一个10行3列的数据集
# 分别代表: 10个用户,3个字段分别是用户的年龄、收入、城市
df = pd.DataFrame({'Age': np.random.randint(22,60,10),'Income':np.random.normal(10000,1000,10),'City': np.random.choice(['北京','上海','广州','深圳'],10)})

生成结果如下:
在这里插入图片描述

1-列的新增

比如现在这份数据集中有用户的年龄、收入与城市。如果用户的性别单独存放在user_gender中,需要将其添加到df中,只需要将其对DataFrame 的列索引直接赋值即可:

# 用户性别信息存储在 user_gender中
user_gender = np.random.choice(['男','女'],10)# 添加用户性别字段: 将 user_gender 直接赋值到 df的新列名 'Gender' 中即可
df['Gender'] = user_genderdf

在这里插入图片描述

2-列的删除

如果不需要用户的性别信息/Gender列,可以通过drop()方法删除该列.

drop()方法的主要参数

df.drop(# 需要删除的列名是col_name / 可以是单个列名字符串或列名列表columns=[col_name]		# 0/1 分别对应 删行还是删列# 当指定 columns 参数时, axis 默认为 1(删除列),axis=0/1			# inplace=False(默认), 将删除后的结果返回为一个新的DataFrame# inplace=True,会修改原始数据,返回 df原地删除后的结果,inplace=True/False		)

下面就以删除’gender’列为例,演示drop()方法的使用:

# 通过drop()方法删除 'Gender'
# 指定 columns=['Gender']后,无需设置axis=1
# 且默认inplace=False,不会修改原始数据df
# 所以将删除后的结果赋值为df2
df2 = df.drop(columns=['Gender'])df2

在这里插入图片描述

3-列值的修改

直接对列重新赋值即可完成对该列的修改,例如假设要将’Income’列的单位由美元更改为人民币:

# 假设美元兑人民币汇率为7
# 将收入 原地修改为 人民币单位
df['Income'] = df['Income']*7df

在这里插入图片描述

4-列名的修改

(1) 所有列名的修改

通过columns属性,将新列名对其重新赋值即可:

# 新列名直接重新赋值给 df.columns
df.columns = ['年龄','收入','城市','性别']df

在这里插入图片描述

(2) 部分列名的修改

如果原始数据的字段数/列数过多,但实际只需修改部分列名时,则可以通过rename()方法更改:

# 此处只对原始数据df的 '年龄'与'性别'列重新赋值# 构建一个字典传入rename()方法的columns中:
#										字典的键 -- 被修改的列名
# 										字典的值 -- 修改后的新名
df = df.rename(columns={'年龄':'用户年龄','性别':'用户性别'})df

在这里插入图片描述

5-列的条件筛选

条件筛选在各种场景下都是高频操作,对于列的筛选,Pandas提供了下面两种高效方式查询:

(1) 布尔表达式

例如要查询出 所有小于40岁的用户,将 df[‘用户年龄’]<40 作为布尔表达式传入 df[ ] 中即可:

df[ df['用户年龄']<40 ]

在这里插入图片描述

对于更复杂的条件,可以配合逻辑运算符(&、|、~)构造布尔表达式查询
例如要查询出 所有小于40岁的女性用户,可以将
(df[‘用户年龄’]<40) 与 (df[‘用户性别’]==‘女’) 两个查询条件通过 与运算符’&’ 连接,构造布尔表达式:

# 注: 不同条件之间最好用 () 区分,保证逻辑正确性
df[  (df['用户年龄']<40) & (df['用户性别']=='女')]

在这里插入图片描述

布尔表达式可以满足基本的条件查询,但当查询条件较为复杂时,布尔表达式会变得冗长,导致可读性低。
例如要查询出:20-40岁之间的女性用户 或者 收入大于70000且居住在上海或广州的用户,
用布尔表达式的查询代码是:

df[((df['用户年龄'] > 20) & (df['用户年龄'] < 40) & (df['用户性别'] == '女')) | ((df['收入'] > 70000) & (df['城市'].isin(['上海', '广州'])))
]

在这里插入图片描述

因此对于复杂的条件查询,Pandas提供了 query()方法。

(2) query()方法

与布尔表达式相比,query()方法具有更简洁的语法和更好的可读性,允许使用字符串表达式来筛选数据。
语法简洁是因为query()使用类似SQL的表达式替代多重括号
例如下面以对于 “所有小于40岁的女性用户”的查询,对比布尔表达式与query()方法的查询表达式

# 布尔表达式
df[ (df['用户年龄']<40) & (df['用户性别']=='女') ]# query()方法
df.query( ' (用户年龄<40) & (用户性别=="女")  ' )

显然 query()方法的查询表达式更简洁
在这里插入图片描述
所以对于“20-40岁之间的女性用户 或者 收入大于70000且居住城市在上海或者广州的用户”,使用query()可以这样查询:

query_how = '(20<用户年龄<40) & (用户性别 == "女") | (收入>70000) & (城市 in ["上海","广州"])'df.query(query_how)

在这里插入图片描述
如果需要进一步提高可读性,也可以按下面的方式查询:

query1 = '(20<用户年龄<40) & (用户性别 == "女")'
query2 = '(收入>70000) & (城市 in ["上海","广州"])'
final_query =  f' {query1} | {query2} 'df.query(final_query)

在这里插入图片描述


文章转载自:

http://MWbzywia.czzpm.cn
http://VCwrgI1p.czzpm.cn
http://SMk11Qcs.czzpm.cn
http://vrIOrx46.czzpm.cn
http://YDXCjvyG.czzpm.cn
http://ADv1FdcM.czzpm.cn
http://MKegEcaB.czzpm.cn
http://g8SZ9Mc4.czzpm.cn
http://KZA6SWvB.czzpm.cn
http://pvoAbKED.czzpm.cn
http://1dJA82gD.czzpm.cn
http://iq2nveRq.czzpm.cn
http://ktVohwzx.czzpm.cn
http://oYg6PohW.czzpm.cn
http://0izkMO5v.czzpm.cn
http://NN50uzW6.czzpm.cn
http://wJ9byJaa.czzpm.cn
http://v6xyA7DB.czzpm.cn
http://SHYZcPXE.czzpm.cn
http://KsSqA8Rz.czzpm.cn
http://mB2H7ZSg.czzpm.cn
http://MjCDibDU.czzpm.cn
http://0vWsTj1v.czzpm.cn
http://rQsKKkDL.czzpm.cn
http://Zcoyrjqm.czzpm.cn
http://URwtuJZQ.czzpm.cn
http://PB1eHaTH.czzpm.cn
http://JMDyBwVP.czzpm.cn
http://mDgS4374.czzpm.cn
http://TglFb0jd.czzpm.cn
http://www.dtcms.com/a/371559.html

相关文章:

  • 【数据结构】经典 Leetcode 题
  • vector的使用和模拟实现
  • 开发思路篇:转账接口设计
  • 20250907-03:LangChain的六大核心模块概览
  • Python-LLMChat
  • 【C++】C++入门—(下)
  • 大数据毕业设计选题推荐-基于大数据的国家基站整点数据分析系统-Hadoop-Spark-数据可视化-BigData
  • 如何编写ICT模拟功能测试
  • 【C++】类与对象(下)
  • 在Ubuntu中如何使用PM2来运行一个编译好的Vue项目
  • Mysql数据库——第一阶段
  • 10 qml教程-自定义属性
  • 万字详解网络编程之TCP/IP协议与UDP协议
  • Gitlab 配置自定义 clone 地址
  • 408考研——循环队列代码题常见套路总结
  • 「日拱一码」081 机器学习——梯度增强特征选择GBFS
  • 阿里云镜像地址获取,并安装 docker的mysql和nginx等服务,java,python,ffmpeg,go等环境
  • IPSec综合配置实验
  • 实现滚动到页面指定位置
  • Linux 系统监控 + 邮件告警实战:CPU、内存、IO、流量全覆盖
  • HarmonyOS 应用开发新范式:深入剖析 Stage 模型与 ArkTS 状态管理
  • Elasticsearch面试精讲 Day 11:索引模板与动态映射
  • 5G NR PDCCH之信号调制
  • Android --- AOSP下载及编译
  • C#中的托管资源与非托管资源介绍
  • 初识Vue
  • JSP到Tomcat特详细教程
  • 滑动窗口与双指针(1)——定长
  • Lua > OpenResty Lua Module
  • [LeetCode 热题 100] 32. 最长有效括号