
在数据分析与挖掘的日常工作中大部分时间都在与数据的“摄入”、“观察”、“筛选”和“输出”打交道。Pandas 提供了极其丰富且直观的 API能让我们像操作 Excel 一样轻松操控结构化数据。本文将围绕数据分析最核心的四步走展开数据读写I/O如何加载与持久化数据数据查看如何从宏观到微观快速了解数据概况数据选择与切片如何精准提取指定行与列数据过滤布尔索引如何按复杂条件筛选目标记录。一、 数据读取与写入I/O 操作Pandas 的 I/O API 设计高度规范统一核心遵循读取数据pd.read_xxx()如read_csv,read_excel,read_sql写入数据df.to_xxx()如to_csv,to_excel,to_sql典型代码实战importpandasaspd# 1. 读取 CSV 文件并通过 usecols 仅加载所需的列大幅节省内存dfpd.read_csv(../data/sales.csv,usecols[订单日期,产品类别,销售数量,单价,客户所在城市,支付方式])# 2. 字段衍生计算销售额 销售数量 * 单价df[销售额]df[销售数量]*df[单价]# 3. 数据持久化取前20条结果导出为新的 CSV 文件并忽略默认索引df.head(20).to_csv(../data/sales_02.csv,indexFalse) 避坑提示写入文件时推荐加上indexFalse否则 Pandas 会默认将行索引0, 1, 2...作为单独一列存入文件导致多出一列未命名索引。二、 数据查看与宏观洞察拿到一份全新数据时切忌盲目分析先调用以下“六大金刚”方法建立对数据全貌的认知方法 / 属性类型核心作用与说明df.head(n)方法查看数据集前 n 行默认 n5df.tail(n)方法查看数据集末尾 n 行默认 n5df.info()方法查看数据集整体元信息列名、非空值数量、数据类型(dtype)、内存占用df.describe()方法输出数值列的统计描述均值、标准差、分位数、极值等df.shape属性获取数据维度元组(行数, 列数)df.columns属性获取所有列名清单核心探查示例# 查看前 5 行样本print(df.head())# 全面体检检查是否存在缺失值Null / NaN及字段类型df.info()# 快速了解各科/各指标的数值分布print(df.describe())三、 数据的精准选择与切片1. 列的选择操作单列df[列名]或df.列名返回Series操作多列df[[列1, 列2]]注意是双层方括号返回DataFrame# 提取单列推荐第一种能防止列名包含空格或特殊符号时的解析异常categorydf[产品类别]pricedf.单价# 提取多列子集sub_dfdf[[产品类别,单价,销售额]]2. 行的切片选择iloc vs loc这是初学者最容易混淆的概念请务必牢记以下区分语法定位依据切片边界规则df.iloc[start:stop:step]基于行号整数位置前闭后开不含 stop同 Python 列表df.loc[start:stop:step]基于索引标签Index Name全闭区间包含 stop# 取前 5 行第 0 ~ 4 行df.iloc[0:5]# 基于显式标签切片假设索引是日期或特定字符串标签df.loc[2025-06-01:2025-06-03]# 结果包含 2025-06-03 这一天四、 数据的条件过滤布尔索引通过构建逻辑判断表达式可以轻松筛出满足业务要求的记录。语法规范df[条件表达式]1. 常见单条件过滤# ① 数值比较筛选销售数量 10 的记录df[df[销售数量]10]# ② 集合包含isin筛选产品类别为 服装 或 食品 的记录df[df[产品类别].isin([服装,食品])]# ③ 区间筛选between筛选单价在 [50, 200] 之间的记录闭区间df[df[单价].between(50,200)]2. 多条件组合过滤当存在多个条件共同筛选时必须注意与并且用或或者用|非排除用~每个独立条件必须用英文圆括号()包裹因为位运算符优先级高于比较运算符# 筛选产品类别是食品 并且 销售数量 3 的数据food_large_salesdf[(df[产品类别]食品)(df[销售数量]3)]# 筛选客户所在城市在北京 或 支付方式是微信支付beijing_or_wechatdf[(df[客户所在城市]北京)|(df[支付方式]微信支付)]五、 全流程综合代码演练将上述各个环节串联起来还原真实开发流程importpandasaspd# 1. 读入数据dfpd.read_csv(../data/sales.csv)# 2. 字段探查print(f数据总览{df.shape[0]}行,{df.shape[1]}列)print(df.info())# 3. 筛选并计算找出单价在 50~200 之间且支付方式为微信支付的高价值订单filtered_dfdf[(df[单价].between(50,200))(df[支付方式]微信支付)]# 4. 精确切片与列选取resultfiltered_df[[订单日期,产品类别,单价,客户所在城市]].iloc[:10]# 5. 输出清洗后的数据result.to_csv(../data/filtered_sales.csv,indexFalse)print(数据导出完成) 总结速记卡片【读写】 pd.read_csv() / pd.read_excel() df.to_csv(indexFalse) 【探查】 df.head() / df.tail() / df.info() / df.describe() 【查列】 df[列名] (单列Series) / df[[列A, 列B]] (多列DataFrame) 【切行】 df.iloc[0:5] (按位置,不包尾) / df.loc[a:c] (按标签,包尾) 【过滤】 df[(条件A) (条件B)] / df[df[列].isin([...])]