在办公自动化场景中,使用Python处理Excel表格的核心在于掌握DataFrame的选取与加工操作。本文围绕高频动作展开:按列选取、按行选取、按区块选取、条件筛选、排序、新增列与删除行列,并演示如何将这些操作串联成完整的数据处理链路。
首先准备演示用的DataFrame:- import pandas as pd
- data = pd.DataFrame({
- "c1": ["A", "B", "C", "D"],
- "c2": [10, 30, 20, 30],
- "c3": [100, 200, 150, 80],
- }, index=["r1", "r2", "r3", "r4"])
- print(data)
复制代码
按列选取:data['c1']与data[['c1']]的区别
最常见的操作用data["c1"]返回Series(一维数据),而data[["c1"]]返回DataFrame(二维表结构)。- col = data["c1"]
- print(type(col)) # Series
- col_df = data[["c1"]]
- 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。- print(data.iloc[0]) # 第一行
- print(data.iloc[0:2]) # 前两行
- print(data.loc["r2"]) # 标签r2
- print(data.loc["r2":"r4"]) # 标签r2到r4
复制代码 iloc用数字位置,loc用业务标签(如工号、日期),根据索引类型选择合适的方法。
按区块选取:iloc[row, col]与loc[rows, cols]
iloc可以定位单元格或矩形区域:- print(data.iloc[0, 1]) # 第0行第1列的值
- print(data.iloc[0:2, 0:2]) # 前2行前2列的子表
复制代码 loc则按标签定位:- print(data.loc["r2", "c3"]) # 标签r2、列c3的值
- print(data.loc["r1":"r3", ["c1", "c3"]]) # r1到r3行,仅c1和c3列
复制代码 注意:iloc与loc不可混用,否则会选错数据。
条件筛选:只保留符合条件的行
单条件筛选:data[data["c2"] > 15] 保留c2大于15的行。
复合条件必须使用&(与)和|(或),且每个条件用括号包裹:- # 正确写法
- result = data[(data["c2"] == 30) & (data["c3"] >= 100)]
复制代码 常见错误:使用and/or或忘记加括号。筛选后建议检查行数:print(len(result))。
排序:sort_values与sort_index
按列排序:- result = data.sort_values(by="c2", ascending=False) # 降序
- result = data.sort_values(by=["c2", "c3"], ascending=[True, False]) # 多列
复制代码 按索引排序:data.sort_index(),适用于日期或编号索引。
新增列与删除行列
新增列类似Excel公式:- data["c4"] = data["c2"] * 2
- # 或组合计算
- data["c4"] = data["c2"] * 10 + data["c3"]
复制代码 删除行列使用drop:- data2 = data.drop(columns=["c3"]) # 删除列
- data2 = data.drop(index=["r1", "r3"]) # 删除行
复制代码 inplace=True会直接修改原DataFrame,新手建议生成新变量,便于调试。
串联完整处理链
实际工作中常需组合操作:筛选c2>=20的行,按c3降序排序,新增c4=c2*2,最后删除c1列。- result = data[data["c2"] >= 20].sort_values(by="c3", ascending=False)
- result["c4"] = result["c2"] * 2
- result = result.drop(columns=["c1"])
- print(result)
复制代码 这种链式写法将Excel手工筛选、排序、公式、删除列转化为可重复执行的代码流。
常见踩坑与建议
1. 复合条件必须使用& / |并加括号,不能用and/or。
2. loc与iloc按标签/位置本质不同,混用会取错数据。
3. 对筛选切片赋值可能触发SettingWithCopyWarning,建议使用.copy():- result = data[data["c2"] >= 20].copy()
- result["c4"] = result["c2"] * 2
复制代码 4. 删除列时慎用inplace=True,尽量保留原数据。
5. 每一步处理后打印shape和columns,验证数据是否符合预期。
总结
DataFrame的选取与处理是pandas办公自动化的核心。掌握按列选取(单列/多列)、按行选取(位置/标签)、区块定位、条件筛选、排序、新增列与删除行,就能将Excel手工操作翻译成稳定、可复用的代码。建议按“读取→选取→筛选→排序→新增列→删除→导出”顺序设计脚本,并重视每一步的验证,避免静默错误。 |