查看: 122|回复: 3

Python pandas DataFrame选取筛选排序新增列实战教程

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
在办公自动化场景中,使用Python处理Excel表格的核心在于掌握DataFrame的选取与加工操作。本文围绕高频动作展开:按列选取、按行选取、按区块选取、条件筛选、排序、新增列与删除行列,并演示如何将这些操作串联成完整的数据处理链路。

首先准备演示用的DataFrame:
  1. import pandas as pd
  2. data = pd.DataFrame({
  3.     "c1": ["A", "B", "C", "D"],
  4.     "c2": [10, 30, 20, 30],
  5.     "c3": [100, 200, 150, 80],
  6. }, index=["r1", "r2", "r3", "r4"])
  7. print(data)
复制代码

按列选取:data['c1']与data[['c1']]的区别
最常见的操作用data["c1"]返回Series(一维数据),而data[["c1"]]返回DataFrame(二维表结构)。
  1. col = data["c1"]
  2. print(type(col))  # Series
  3. col_df = data[["c1"]]
  4. print(type(col_df))  # DataFrame
复制代码
若后续需要拼接、导出或继续以表格形式操作,建议优先使用双中括号以保留表结构。选取多列也使用相同语法:data[["c1", "c3"]]。

按行选取:head、iloc、loc如何选
head()用于快速预览数据:data.head(3)查看前3行。
iloc按位置选取:data.iloc[0]取第一行,data.iloc[0:2]取第0行到第1行(左闭右开)。
loc按标签选取:data.loc["r2"]取索引为r2的行,loc["r2":"r4"]包含右端点r4。
  1. print(data.iloc[0])       # 第一行
  2. print(data.iloc[0:2])     # 前两行
  3. print(data.loc["r2"])     # 标签r2
  4. print(data.loc["r2":"r4"]) # 标签r2到r4
复制代码
iloc用数字位置,loc用业务标签(如工号、日期),根据索引类型选择合适的方法。

按区块选取:iloc[row, col]与loc[rows, cols]
iloc可以定位单元格或矩形区域:
  1. print(data.iloc[0, 1])       # 第0行第1列的值
  2. print(data.iloc[0:2, 0:2])   # 前2行前2列的子表
复制代码
loc则按标签定位:
  1. print(data.loc["r2", "c3"])              # 标签r2、列c3的值
  2. print(data.loc["r1":"r3", ["c1", "c3"]])  # r1到r3行,仅c1和c3列
复制代码
注意:iloc与loc不可混用,否则会选错数据。

条件筛选:只保留符合条件的行
单条件筛选:data[data["c2"] > 15] 保留c2大于15的行。
复合条件必须使用&(与)和|(或),且每个条件用括号包裹:
  1. # 正确写法
  2. result = data[(data["c2"] == 30) & (data["c3"] >= 100)]
复制代码
常见错误:使用and/or或忘记加括号。筛选后建议检查行数:print(len(result))。

排序:sort_values与sort_index
按列排序:
  1. result = data.sort_values(by="c2", ascending=False)  # 降序
  2. result = data.sort_values(by=["c2", "c3"], ascending=[True, False]) # 多列
复制代码
按索引排序:data.sort_index(),适用于日期或编号索引。

新增列与删除行列
新增列类似Excel公式:
  1. data["c4"] = data["c2"] * 2
  2. # 或组合计算
  3. data["c4"] = data["c2"] * 10 + data["c3"]
复制代码
删除行列使用drop:
  1. data2 = data.drop(columns=["c3"])      # 删除列
  2. data2 = data.drop(index=["r1", "r3"])  # 删除行
复制代码
inplace=True会直接修改原DataFrame,新手建议生成新变量,便于调试。

串联完整处理链
实际工作中常需组合操作:筛选c2>=20的行,按c3降序排序,新增c4=c2*2,最后删除c1列。
  1. result = data[data["c2"] >= 20].sort_values(by="c3", ascending=False)
  2. result["c4"] = result["c2"] * 2
  3. result = result.drop(columns=["c1"])
  4. print(result)
复制代码
这种链式写法将Excel手工筛选、排序、公式、删除列转化为可重复执行的代码流。

常见踩坑与建议
1. 复合条件必须使用& / |并加括号,不能用and/or。
2. loc与iloc按标签/位置本质不同,混用会取错数据。
3. 对筛选切片赋值可能触发SettingWithCopyWarning,建议使用.copy():
  1. result = data[data["c2"] >= 20].copy()
  2. result["c4"] = result["c2"] * 2
复制代码
4. 删除列时慎用inplace=True,尽量保留原数据。
5. 每一步处理后打印shape和columns,验证数据是否符合预期。

总结
DataFrame的选取与处理是pandas办公自动化的核心。掌握按列选取(单列/多列)、按行选取(位置/标签)、区块定位、条件筛选、排序、新增列与删除行,就能将Excel手工操作翻译成稳定、可复用的代码。建议按“读取→选取→筛选→排序→新增列→删除→导出”顺序设计脚本,并重视每一步的验证,避免静默错误。
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Python pandas DataFrame选取筛选排序新增列实战教程

感谢楼主的详细教程!特别是关于 `data['c1']` 和 `data[['c1']]` 的区别、条件筛选时 & 必须加括号的提醒,以及 `SettingWithCopyWarning` 的处理建议,都是新手容易踩坑的地方,讲得很清楚。想请教一下,在串联完整处理链的时候,如果中间需要多次筛选和新增列,用 `.copy()` 创建副本后操作,是不是比链式写法更安全、更易调试?
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Python pandas DataFrame选取筛选排序新增列实战教程

非常干货的教程!感谢楼主的详细讲解,特别是 `iloc` 与 `loc` 的区别、复合条件筛选的括号与 `&` 用法,还有 `SettingWithCopyWarning` 的防范,这些都是新手最容易踩坑的地方。我平时用 pandas 处理报表时,经常需要把筛选、排序、新增列串起来操作,楼主最后那个完整处理链的例子特别实用——相当于把 Excel 里的多步手工操作变成一行行可复用的代码,对办公自动化帮助很大。有个小问题想请教:如果源数据有缺失值,在筛选前一般先做 `dropna` 还是可以在筛选条件里直接用 `notna` 处理?期待楼主后续还能分享更多实战案例。
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Python pandas DataFrame选取筛选排序新增列实战教程

这篇教程非常实用,把DataFrame最常用的操作和容易踩坑的点都讲清楚了,尤其是`loc`和`iloc`的区别、复合条件筛选加括号、以及赋值时用`.copy()`避免警告,都是新手经常忽略但至关重要的细节。对初学者来说,能照着这个链式处理的思路一步步操作,很快就能上手处理Excel表格了。感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-16 13:08 , Processed in 0.026801 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部