news 2026/5/13 1:45:05

模块二-数据选择与索引——06. 列选择与操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
模块二-数据选择与索引——06. 列选择与操作

06. 列选择与操作

1. 概述

数据选择是 Pandas 最常用的操作之一。掌握列选择与操作,可以高效地提取、添加、修改和删除数据列。

importpandasaspdimportnumpyasnp# 创建示例数据df=pd.DataFrame({'姓名':['张三','李四','王五','赵六','钱七'],'年龄':[25,30,28,32,35],'城市':['北京','上海','广州','深圳','杭州'],'工资':[8000,12000,10000,15000,11000],'部门':['技术','销售','技术','市场','销售']})print("原始数据:")print(df)

2. 选择单列

2.1 使用方括号df['列名']

最常用的方式,返回 Series。

# 选择单列name_col=df['姓名']print("姓名列:")print(name_col)print(f"类型:{type(name_col)}")# 选择单列的另一种写法(仅当列名是有效 Python 标识符)name_col2=df.姓名print("\n使用点语法:")print(name_col2)

注意:点语法有局限性,当列名包含空格、特殊字符或与 DataFrame 方法重名时不能用。推荐使用方括号。

2.2 获取列的值数组

# 获取 NumPy 数组values=df['工资'].valuesprint(f"工资数组:{values}")print(f"类型:{type(values)}")# 获取列表values_list=df['工资'].tolist()print(f"工资列表:{values_list}")

3. 选择多列

使用双括号df[['列1', '列2']],返回 DataFrame。

# 选择多列subset=df[['姓名','年龄','工资']]print("选择多列:")print(subset)print(f"类型:{type(subset)}")# 使用变量指定列名cols=['姓名','城市']subset2=df[cols]print("\n使用变量:")print(subset2)

4. 添加新列

4.1 直接赋值添加

# 添加常量列df['等级']='普通'print("添加常量列:")print(df)# 通过现有列计算df['年薪']=df['工资']*12print("\n添加计算列:")print(df)# 通过条件添加df['是否高薪']=df['工资']>10000print("\n添加条件列:")print(df)

4.2 使用 assign() 方法

assign()返回新的 DataFrame,不修改原数据。

# 使用 assign 添加列df_new=df.assign(月薪=df['工资'],年薪2=df['工资']*12,评级=lambdax:'A'ifx['工资'].mean()>10000else'B')print("使用 assign 添加列:")print(df_new)# 原数据未被修改print("\n原数据不变:")print(df.columns.tolist())

4.3 使用 insert() 插入到指定位置

# 在指定位置插入列(位置、列名、值)df.insert(1,'性别',['男','女','男','女','男'])print("插入列到位置1:")print(df)

5. 修改列

5.1 修改整列的值

# 修改整列df['等级']='黄金'print("修改等级列:")print(df)# 批量修改df['年薪']=df['年薪']*1.1# 涨薪10%print("\n修改年薪:")print(df)

5.2 条件修改

# 使用 loc 条件修改df.loc[df['工资']>10000,'等级']='钻石'print("条件修改等级:")print(df)# 使用 numpy wheredf['奖金']=np.where(df['工资']>10000,10000,5000)print("\n条件添加奖金:")print(df)

5.3 使用 map() 映射修改

# 创建映射字典level_map={'普通':'Normal','黄金':'Gold','钻石':'Diamond'}df['等级英文']=df['等级'].map(level_map)print("使用 map 映射:")print(df)

6. 重命名列

6.1 使用 rename() 方法

# 重命名单个列df_renamed=df.rename(columns={'姓名':'name','年龄':'age'})print("重命名单个列:")print(df_renamed)# 重命名多个列df_renamed=df.rename(columns={'姓名':'name','年龄':'age','城市':'city','工资':'salary'})print("\n重命名多个列:")print(df_renamed)# 原地修改df.rename(columns={'等级英文':'level_en'},inplace=True)print("\n原地修改:")print(df.columns.tolist())

6.2 直接修改 columns 属性

# 直接赋值(需要提供全部列名)df.columns=['name','gender','age','city','salary','dept','level','annual_salary','is_high_salary','bonus','level_en']print("直接修改 columns:")print(df.head())# 使用列表推导式批量修改# df.columns = [col.upper() for col in df.columns]

7. 删除列

7.1 使用 drop() 方法

# 删除单列df_dropped=df.drop('bonus',axis=1)print("删除 bonus 列:")print(df_dropped.columns.tolist())# 删除多列df_dropped=df.drop(['level_en','is_high_salary'],axis=1)print("\n删除多列:")print(df_dropped.columns.tolist())# 原地删除df.drop('bonus',axis=1,inplace=True)print("\n原地删除:")print(df.columns.tolist())

7.2 使用 del 语句

# 删除列(原地删除)deldf['level_en']print("使用 del 删除:")print(df.columns.tolist())

7.3 使用 pop() 方法

pop()删除列并返回该列。

# 删除并返回列removed_col=df.pop('annual_salary')print("删除的列:")print(removed_col.head())print("\n剩余列:")print(df.columns.tolist())

8. 列的类型转换

8.1 查看列类型

print("列类型:")print(df.dtypes)

8.2 转换列类型

# 转换为字符串df['年龄']=df['年龄'].astype(str)print("年龄转为字符串:")print(df.dtypes)# 转换为整数df['年龄']=df['年龄'].astype(int)print("\n年龄转回整数:")print(df.dtypes)# 转换为分类类型(节省内存)df['部门']=df['部门'].astype('category')print("\n部门转为 category:")print(df.dtypes)

9. 列的排序

9.1 按列名排序

# 按列名排序(axis=1 表示列)df_sorted=df.reindex(sorted(df.columns),axis=1)print("按列名排序:")print(df_sorted.columns.tolist())

9.2 指定列顺序

# 指定列的顺序column_order=['姓名','年龄','部门','城市','工资','等级']df_reordered=df[column_order]print("指定列顺序:")print(df_reordered.columns.tolist())

10. 完整示例:客户数据分析

# 创建客户数据np.random.seed(42)customers=pd.DataFrame({'customer_id':range(1,11),'name':[f'客户_{i}'foriinrange(1,11)],'age':np.random.randint(20,60,10),'purchase_amount':np.random.randint(100,5000,10),'purchase_count':np.random.randint(1,20,10),'city':np.random.choice(['北京','上海','广州','深圳'],10)})print("="*60)print("原始客户数据")print("="*60)print(customers)# 1. 选择特定列print("\n1. 选择客户ID、姓名、购买金额:")print(customers[['customer_id','name','purchase_amount']])# 2. 添加计算列customers['avg_purchase']=customers['purchase_amount']/customers['purchase_count']customers['avg_purchase']=customers['avg_purchase'].round(0)print("\n2. 添加平均购买金额列:")print(customers[['name','purchase_amount','purchase_count','avg_purchase']])# 3. 添加客户等级customers['level']=pd.cut(customers['purchase_amount'],bins=[0,1000,2000,3000,5000],labels=['铜牌','银牌','金牌','钻石'])print("\n3. 添加客户等级:")print(customers[['name','purchase_amount','level']])# 4. 重命名列customers.rename(columns={'purchase_amount':'total_spent','purchase_count':'order_count'},inplace=True)print("\n4. 重命名列:")print(customers.columns.tolist())# 5. 删除临时列customers.drop('avg_purchase',axis=1,inplace=True)print("\n5. 删除临时列后:")print(customers.columns.tolist())# 6. 按购买金额排序显示print("\n6. 按消费金额降序:")print(customers[['name','total_spent','level']].sort_values('total_spent',ascending=False))

11. 总结

操作方法示例
选择单列df['col']df['姓名']
选择多列df[['col1', 'col2']]df[['姓名', '年龄']]
添加列df['new'] = valuesdf['总分'] = df['数学'] + df['语文']
添加列(不修改原数据)df.assign()df.assign(新列=df['A'] * 2)
插入列df.insert(pos, name, values)df.insert(0, 'ID', range(10))
条件修改df.loc[condition, col] = valuedf.loc[df['年龄']>30, '等级']='高'
映射修改df['col'].map(dict)df['性别'].map({'M':'男','F':'女'})
重命名列df.rename(columns={})df.rename(columns={'A':'a'})
删除列df.drop(col, axis=1)df.drop('col', axis=1)
类型转换df['col'].astype(type)df['年龄'].astype('int32')

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 1:45:05

免费AI聊天机器人部署指南:整合多模型与全栈技术实践

1. 项目概述与核心价值最近在折腾一些AI应用,发现很多朋友都想自己部署一个免费的、功能强大的聊天机器人,但要么被高昂的API费用劝退,要么被复杂的部署流程搞得头大。如果你也有同样的困扰,那么今天聊的这个项目——CNSeniorious…

作者头像 李华
网站建设 2026/5/13 1:44:11

CoPaw:打造本地化AI工作站,实现多通道智能助手与自动化任务

1. 项目概述:你的个人AI工作站 如果你和我一样,每天被钉钉、飞书、QQ、Discord、微信等各种IM工具的消息淹没,同时还要处理邮件、整理文档、追踪新闻、甚至写点代码,那你肯定幻想过能有一个全天候在线的智能助手。它最好能帮我自…

作者头像 李华
网站建设 2026/5/13 1:43:24

ROS机器人操作系统

ROS 的核心架构节点管理器 Master:负责管理所有节点,提供命名服务和注册服务节点 Node:ROS 的基本执行单元,每个节点负责一个特定的功能话题 Topic:节点之间异步通信的方式,发布者发布消息,订阅…

作者头像 李华
网站建设 2026/5/13 1:37:38

如何用歌词滚动姬实现专业级LRC歌词制作:终极免费工具指南

如何用歌词滚动姬实现专业级LRC歌词制作:终极免费工具指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 歌词滚动姬(lrc-maker&#xff09…

作者头像 李华
网站建设 2026/5/13 1:31:06

python进阶学习Day01_随堂笔记

面向对象和面向过程编程思想就是人们利用计算机来解决问题的思维.分类面向过程它是一种编程思想, 强调的是以 步骤(过程) 为基础完成各种操作.面向对象参考思路: 概述, 思想特点, 举例, 总结 它是一种编程思想, 强调的是以 对象 为基础完成各种操作, 它是基于 面向过程的. 说到…

作者头像 李华