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

模块二-数据选择与索引——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')

http://www.jsqmd.com/news/805860/

相关文章:

  • Rust异步运行时rustclaw:高性能任务调度与并发编程实践
  • 2026年最新盘点:为何宁波迪泰自动化设备有限公司是滚筒线专业工厂的首选 - 2026年企业推荐榜
  • Arm虚拟化内存管理:VTCR_EL2寄存器详解与实践
  • DollhouseMCP Collection:构建结构化AI能力库的完整指南
  • 物联网应届生,如何把不自信练没
  • classmcp:基于MCP协议的语义化CSS工具,提升AI前端开发效率
  • 通辽专业装修技术解析:通辽靠谱装修/通辽全屋整装/通辽别墅装修/通辽大宅装修/通辽大平层装修/通辽家装/通辽房子装修/选择指南 - 优质品牌商家
  • 嵌入式产品如何通过RTOS选型抢占市场先机
  • Yaskawa JACP-317800输入输出模块
  • 环境土壤物理Hydrus1D2D模型实践技术应用及典型案例分析
  • Notepad++集成AI插件NppOpenAI:键盘流开发者的效率革命
  • 从Photoshop到手机App:揭秘‘美颜’功能背后的技术演进与核心算法对比
  • 告别等待后端!Postman Mock Server 保姆级配置指南,5分钟搞定API模拟
  • 2026年啤酒生产线TOP10推荐:米酒厂设备、米酒厂酿造设备、米酒生产线、米酒酿造设备、精酿啤酒设备、精酿米酒设备选择指南 - 优质品牌商家
  • 终极内存优化指南:5分钟掌握Mem Reduct高效清理技巧
  • 手把手集成离线库:金融反欺诈与企业级风控数据服务选型落地
  • 免费AI聊天机器人部署指南:整合多模型与全栈技术实践
  • MobaXterm 全能终端神器:实战指南
  • 量子计算中的漂移扩散模型与条件SWAP实现
  • 别再手动切分.vue文件了!用vue-running在线调试Element-UI和iView组件(附Sublime快捷键配置)
  • AI大模型学习路线:(2026最新)AI大模型学习路线,小白逆袭!3步掌握AI大模型
  • NSA 5G:从双连接到网络切片,解析5G组网演进之路
  • Midjourney V7到V8的跃迁真相:从提示词兼容性、渲染速度、手部细节到版权归属,8大关键维度压测数据全公开
  • 如何将Mac Boot Camp驱动部署时间从45分钟缩短到5分钟?
  • AI应用开发中如何利用Taotoken模型广场进行快速的模型选型与测试
  • Crystal语言Web框架实战:构建高性能API服务的轻量级方案
  • 模块二-数据选择与索引——08. 条件筛选
  • AI智能体技能开发实战:基于Agent Skills规范连接Bitrefill消费平台
  • Spring Boot的配置加载顺序
  • 最常用的idea插件