首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >pandas - 一个强大的Python数据分析工具包

pandas - 一个强大的Python数据分析工具包

作者头像
wangmcn
发布2026-05-18 17:41:59
发布2026-05-18 17:41:59
2310
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试

1、前言

数据爆炸时代,数据分析已成为各行业决策的核心依据,金融、科研、商业等领域的海量数据均藏巨大价值。但日常分析常遇痛点:数据格式繁杂(CSV、Excel、数据库结果等),读取整合困难;缺失值、异常值频发影响准确性;数据量激增导致普通处理方法效率低下。

pandas作为Python核心数据分析库,凭借快速灵活的数据结构,能高效处理关系型与标记型数据,精准解决上述痛点。它如同数据分析的瑞士军刀,可轻松适配多格式数据,几行代码就能完成缺失值、异常值处理及筛选、分组等操作,广泛应用于金融、科研、电商等领域,是数据分析不可或缺的工具。

2、简介

pandas,全称 Python Data Analysis Library,是基于 NumPy 开发的一款专门用于数据处理和分析的高性能库。它诞生于 2008 年,由 Wes McKinney 开发,旨在解决 Python 在金融数据分析中的局限性。pandas 的名字来源于“Panel Data”(面板数据),从侧面反映了它在处理表格数据方面的强大能力。

核心定位:

pandas 基于 NumPy 构建(兼容 NumPy 数值计算),专门解决结构化、带标签数据的处理痛点——弥补了纯 Python 或 NumPy 在处理表格数据、缺失值、文本、时间序列等场景下的不足,提供了“一站式”的数据处理能力,从数据读取、清洗到分析、输出全流程覆盖。

核心特性:

  • 易用的带标签数据结构:提供两大核心结构,让数据操作更直观(区别于 NumPy 的无标签数组)
    • Series:一维带标签的数组(可理解为“带索引的单列数据”);
    • DataFrame:二维带标签的表格型结构(可理解为“Excel 表格的编程版”,是 pandas 最核心的结构)。
  • 强大的数据读写能力:支持 CSV、Excel、JSON、SQL 数据库、Parquet 等主流数据格式的快速读写,无需手动解析数据格式。
  • 灵活的数据清洗与预处理:内置缺失值处理(填充/删除)、重复值清理、数据类型转换、异常值筛选等功能,大幅降低数据清洗的代码量。
  • 高效的分组与聚合:类似 SQL 的 group by 功能,可按任意维度对数据分组,并快速计算均值、求和、计数等统计指标。
  • 专业的时间序列处理:专为金融、时序分析优化,支持日期解析、时间重采样(如按天/月/年聚合)、时区转换等,是时间序列分析的首选工具。
  • 无缝衔接其他库:可与 Matplotlib(可视化)、Scikit-learn(机器学习)、NumPy(数值计算)等库无缝配合,构成完整的数据分析链路。

适用场景:

  • 日常数据分析与报表生成。
  • 大规模结构化数据的清洗与预处理。
  • 金融、电商等领域的时间序列分析(如销售额趋势、股价分析)。
  • 机器学习项目的特征工程(数据预处理阶段)。
  • 多源数据的合并、拼接与整合。

官方网址:

https://pandas.pydata.org/

3、安装

1、Python 版本支持

pandas 官方支持Python 3.9、3.10、3.11、3.12 版本。

2、安装方式

2.1、Anaconda 安装(推荐新手)

适合 Python 入门用户,可一键获取 pandas 及 PyData 生态栈全套工具

支持 Linux、macOS、Windows 跨平台

2.2、Miniconda 安装(推荐有经验用户)

可创建轻量级独立虚拟环境,避免依赖冲突

代码语言:javascript
复制
# 创建包含 Python 和 pandas 的环境
conda create -c conda-forge -n 自定义环境名 python pandas
# 激活环境
# Linux/macOS
source activate 自定义环境名
# Windows
activate 自定义环境名

2.3、PyPI 安装(pip方式)

要求pip >= 19.3

基础安装命令

代码语言:javascript
复制
pip install pandas

可加装可选依赖,实现特定功能,示例

代码语言:javascript
复制
# 支持 Excel 文件读写
pip install "pandas[excel]"

推荐搭配 Python 标准库的 venv 创建虚拟环境

3、可选依赖(按功能分类)

  • 可选依赖需通过pip install "pandas[功能名]" 方式安装,部分分类如下
  • 性能优化:numexpr、bottleneck、numba,提升大数据集运算速度
  • 可视化:matplotlib、Jinja2、tabulate,支持绘图和数据格式化输出
  • Excel处理:xlrd、xlsxwriter、openpyxl,支持读写各类Excel文件
  • SQL数据库:SQLAlchemy、psycopg2、pymysql,支持连接PostgreSQL、MySQL等数据库
  • 云数据访问:fsspec、gcsfs、s3fs,支持访问GCS、S3等云存储

4、快速上手

pandas 是 Python 生态中核心的数据处理与分析库,基于 NumPy 构建,提供了高效、灵活的带标签数据结构(Series/DataFrame),覆盖从数据读取、清洗到分析、输出的全流程数据处理需求。

1、核心数据结构

pandas 的所有操作均围绕两大核心结构展开:

结构一:Series

描述:一维带标签的数组,包含数据值 + 索引

适用场景:单列数据(如时间序列)

结构二:DataFrame

描述:二维带标签的表格型结构,由多个 Series 组成

适用场景:多列结构化数据(核心)

代码语言:javascript
复制
import pandas as pd
import numpy as np

# 创建 Series
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f'])

# 创建 DataFrame
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [20, 25, 30],
    '城市': ['北京', '上海', '广州']
}, index=['001', '002', '003']) # 自定义行索引(编号)

2、数据读取与写入

数据格式:CSV

读取函数:pd.read_csv('文件.csv')

写入函数:df.to_csv('文件.csv')

数据格式:Excel

读取函数:pd.read_excel('文件.xlsx')

写入函数:df.to_excel('文件.xlsx')

数据格式:JSON

读取函数:pd.read_json('文件.json')

写入函数:df.to_json('文件.json')

数据格式:SQL

读取函数:pd.read_sql(query, conn)

写入函数:df.to_sql(table, conn)

代码语言:javascript
复制
# 读取CSV文件(常用)
df = pd.read_csv('data.csv', encoding='utf-8') # 指定编码避免中文乱码

# 写入Excel文件(指定sheet名)
df.to_excel('result.xlsx', sheet_name='数据结果', index=False) # 不保存行索引

3、数据查看与探索

代码语言:javascript
复制
# 基础查看
df.head(3) # 查看前3行(默认5行)
df.tail(2) # 查看后2行
df.info() # 查看数据类型、非空值、内存占用(核心)
df.describe() # 数值列的统计信息(均值、标准差、分位数等)

# 基础属性
df.shape # 数据维度 (行数, 列数)
df.columns # 列名列表
df.index # 行索引列表
df.dtypes # 各列数据类型

4、数据清洗

代码语言:javascript
复制
# 缺失值处理
df.isnull().sum() # 统计各列缺失值数量
df.dropna() # 删除含缺失值的行(可指定axis=1删列)
df.fillna(0) # 缺失值填充为0(也可填均值/中位数:df['列名'].mean())

# 重复值处理
df.duplicated() # 判断每行是否重复
df.drop_duplicates()# 删除重复行(默认按所有列判断)

# 数据类型转换
df['年龄'] = df['年龄'].astype(int) # 转为整数型
df['日期'] = pd.to_datetime(df['日期']) # 转为日期类型

# 异常值处理(示例:筛选年龄在0-100之间的数据)
df = df[(df['年龄'] > 0) & (df['年龄'] < 100)]

5、数据筛选与索引

代码语言:javascript
复制
# 列选择
df['姓名'] # 选择单列
df[['姓名', '年龄']] # 选择多列

# 行筛选(布尔索引,核心)
df[df['年龄'] > 25] # 筛选年龄>25的行
df[(df['城市'] == '北京') & (df['年龄'] < 30)] # 多条件筛选(&且,|或)

# 按索引筛选(loc按标签,iloc按位置)
df.loc['001'] # 按行标签取值
df.loc['001':'002', '姓名':'年龄'] # 标签切片
df.iloc[0] # 按行位置(第1行)取值
df.iloc[0:2, 0:2] # 位置切片(前2行,前2列)

6、数据转换与运算

代码语言:javascript
复制
# 元素级操作
df['年龄+5'] = df['年龄'] + 5# 列运算
df['姓名长度'] = df['姓名'].apply(len) # 对列应用函数(计算姓名长度)

# 自定义函数示例(将年龄分组)
def age_group(age):
    if age < 18:
        return'未成年'
    else:
        return'成年'
df['年龄分组'] = df['年龄'].apply(age_group)

# 全局替换
df['城市'] = df['城市'].replace('北京', '北京市') # 替换指定值

7、数据合并与重塑

代码语言:javascript
复制
# 数据拼接(concat)
df1 = pd.DataFrame({'A': [1,2], 'B': [3,4]})
df2 = pd.DataFrame({'A': [5,6], 'B': [7,8]})
pd.concat([df1, df2]) # 纵向拼接(行合并)

# 数据合并(merge,类似SQL连接)
df3 = pd.DataFrame({'编号': ['001', '002'], '薪资': [8000, 10000]})
pd.merge(df, df3, on='编号') # 按“编号”列合并(内连接,默认)

# 数据重塑(宽表转长表)
df.melt(id_vars=['姓名'], value_vars=['年龄', '城市'], 
        var_name='属性', value_name='值')

8、时间序列处理

代码语言:javascript
复制
# 日期解析
df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d') # 指定日期格式

# 提取时间特征
df['年'] = df['日期'].dt.year
df['月'] = df['日期'].dt.month
df['星期'] = df['日期'].dt.dayofweek # 0=周一,6=周日

# 时间重采样(按周期聚合)
df.set_index('日期').resample('M')['销售额'].sum() # 按月汇总销售额

9、数据分组与聚合(groupby)

代码语言:javascript
复制
# 基础分组聚合
df.groupby('城市')['年龄'].mean() # 按城市分组,计算平均年龄

# 多列多聚合函数
df.groupby('城市').agg({
    '年龄': ['mean', 'max'], # 年龄的均值和最大值
    '薪资': 'sum'             # 薪资的总和
})

# 分组后转换(保留原数据结构)
df['城市平均年龄'] = df.groupby('城市')['年龄'].transform('mean')

10、数据可视化(基础)

基于 matplotlib 快速绘制图表:

代码语言:javascript
复制
# 折线图(默认)
df.plot(x='日期', y='销售额', figsize=(10, 5), title='销售额趋势')

# 柱状图
df.groupby('城市')['年龄'].mean().plot(kind='bar', color='skyblue')

# 直方图(分布)
df['年龄'].plot(kind='hist', bins=10)

# 散点图
df.plot(kind='scatter', x='年龄', y='薪资')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档