
1、前言
数据爆炸时代,数据分析已成为各行业决策的核心依据,金融、科研、商业等领域的海量数据均藏巨大价值。但日常分析常遇痛点:数据格式繁杂(CSV、Excel、数据库结果等),读取整合困难;缺失值、异常值频发影响准确性;数据量激增导致普通处理方法效率低下。
pandas作为Python核心数据分析库,凭借快速灵活的数据结构,能高效处理关系型与标记型数据,精准解决上述痛点。它如同数据分析的瑞士军刀,可轻松适配多格式数据,几行代码就能完成缺失值、异常值处理及筛选、分组等操作,广泛应用于金融、科研、电商等领域,是数据分析不可或缺的工具。
2、简介
pandas,全称 Python Data Analysis Library,是基于 NumPy 开发的一款专门用于数据处理和分析的高性能库。它诞生于 2008 年,由 Wes McKinney 开发,旨在解决 Python 在金融数据分析中的局限性。pandas 的名字来源于“Panel Data”(面板数据),从侧面反映了它在处理表格数据方面的强大能力。
核心定位:
pandas 基于 NumPy 构建(兼容 NumPy 数值计算),专门解决结构化、带标签数据的处理痛点——弥补了纯 Python 或 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 安装(推荐有经验用户)
可创建轻量级独立虚拟环境,避免依赖冲突
# 创建包含 Python 和 pandas 的环境
conda create -c conda-forge -n 自定义环境名 python pandas
# 激活环境
# Linux/macOS
source activate 自定义环境名
# Windows
activate 自定义环境名2.3、PyPI 安装(pip方式)
要求pip >= 19.3
基础安装命令
pip install pandas可加装可选依赖,实现特定功能,示例
# 支持 Excel 文件读写
pip install "pandas[excel]"推荐搭配 Python 标准库的 venv 创建虚拟环境
3、可选依赖(按功能分类)
4、快速上手
pandas 是 Python 生态中核心的数据处理与分析库,基于 NumPy 构建,提供了高效、灵活的带标签数据结构(Series/DataFrame),覆盖从数据读取、清洗到分析、输出的全流程数据处理需求。
1、核心数据结构
pandas 的所有操作均围绕两大核心结构展开:
结构一:Series
描述:一维带标签的数组,包含数据值 + 索引
适用场景:单列数据(如时间序列)
结构二:DataFrame
描述:二维带标签的表格型结构,由多个 Series 组成
适用场景:多列结构化数据(核心)
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)
# 读取CSV文件(常用)
df = pd.read_csv('data.csv', encoding='utf-8') # 指定编码避免中文乱码
# 写入Excel文件(指定sheet名)
df.to_excel('result.xlsx', sheet_name='数据结果', index=False) # 不保存行索引3、数据查看与探索
# 基础查看
df.head(3) # 查看前3行(默认5行)
df.tail(2) # 查看后2行
df.info() # 查看数据类型、非空值、内存占用(核心)
df.describe() # 数值列的统计信息(均值、标准差、分位数等)
# 基础属性
df.shape # 数据维度 (行数, 列数)
df.columns # 列名列表
df.index # 行索引列表
df.dtypes # 各列数据类型4、数据清洗
# 缺失值处理
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、数据筛选与索引
# 列选择
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、数据转换与运算
# 元素级操作
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、数据合并与重塑
# 数据拼接(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、时间序列处理
# 日期解析
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)
# 基础分组聚合
df.groupby('城市')['年龄'].mean() # 按城市分组,计算平均年龄
# 多列多聚合函数
df.groupby('城市').agg({
'年龄': ['mean', 'max'], # 年龄的均值和最大值
'薪资': 'sum' # 薪资的总和
})
# 分组后转换(保留原数据结构)
df['城市平均年龄'] = df.groupby('城市')['年龄'].transform('mean')10、数据可视化(基础)
基于 matplotlib 快速绘制图表:
# 折线图(默认)
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='薪资')本文分享自 AllTests软件测试 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!