拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Pandas核心实战】玩转数据处理:数据读写、全方位查看、切片选择与条件过滤完全指南

【Pandas核心实战】玩转数据处理:数据读写、全方位查看、切片选择与条件过滤完全指南

在数据分析与挖掘的日常工作中,大部分时间都在与数据的“摄入”、“观察”、“筛选”和“输出”打交道。Pandas 提供了极其丰富且直观的 API,能让我们像操作 Excel 一样轻松操控结构化数据。

本文将围绕数据分析最核心的四步走展开:

  1. 数据读写(I/O):如何加载与持久化数据;
  2. 数据查看:如何从宏观到微观快速了解数据概况;
  3. 数据选择与切片:如何精准提取指定行与列;
  4. 数据过滤(布尔索引):如何按复杂条件筛选目标记录。

一、 数据读取与写入(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 仅加载所需的列(大幅节省内存)df=pd.read_csv('../data/sales.csv',usecols=['订单日期','产品类别','销售数量','单价','客户所在城市','支付方式'])# 2. 字段衍生计算:销售额 = 销售数量 * 单价df['销售额']=df['销售数量']*df['单价']# 3. 数据持久化:取前20条结果导出为新的 CSV 文件,并忽略默认索引df.head(20).to_csv('../data/sales_02.csv',index=False)

💡 避坑提示:
写入文件时推荐加上index=False,否则 Pandas 会默认将行索引0, 1, 2...作为单独一列存入文件,导致多出一列未命名索引。


二、 数据查看与宏观洞察

拿到一份全新数据时,切忌盲目分析,先调用以下“六大金刚”方法建立对数据全貌的认知:

方法 / 属性类型核心作用与说明
df.head(n)方法查看数据集前 n 行(默认 n=5)
df.tail(n)方法查看数据集末尾 n 行(默认 n=5)
df.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)
# 提取单列(推荐第一种,能防止列名包含空格或特殊符号时的解析异常)category=df['产品类别']price=df.单价# 提取多列子集sub_df=df[['产品类别','单价','销售额']]

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_sales=df[(df['产品类别']=='食品')&(df['销售数量']>=3)]# 筛选:客户所在城市在'北京' 或 支付方式是'微信支付'beijing_or_wechat=df[(df['客户所在城市']=='北京')|(df['支付方式']=='微信支付')]

五、 全流程综合代码演练

将上述各个环节串联起来,还原真实开发流程:

importpandasaspd# 1. 读入数据df=pd.read_csv('../data/sales.csv')# 2. 字段探查print(f"数据总览:{df.shape[0]}行,{df.shape[1]}列")print(df.info())# 3. 筛选并计算:找出单价在 50~200 之间且支付方式为微信支付的高价值订单filtered_df=df[(df['单价'].between(50,200))&(df['支付方式']=='微信支付')]# 4. 精确切片与列选取result=filtered_df[['订单日期','产品类别','单价','客户所在城市']].iloc[:10]# 5. 输出清洗后的数据result.to_csv('../data/filtered_sales.csv',index=False)print("数据导出完成!")

📌 总结速记卡片

【读写】 pd.read_csv() / pd.read_excel() ==> df.to_csv(index=False) 【探查】 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([...])]
返回列表