一、什么是 Pandas?为什么要学它?
Pandas 是 Python 生态中最强大的数据处理库,专为结构化数据(表格、CSV、Excel 等)设计,就像 “Python 版的 Excel”,但功能更强大、处理速度更快,支持百万级数据高效操作。
无论是数据分析、机器学习数据预处理,还是日常工作中的数据整理,Pandas 都能帮你:
- 快速读取 / 保存 CSV、Excel、数据库等多种格式数据
- 一键查看数据基本信息(缺失值、统计特征)
- 灵活筛选、排序、分组数据
- 轻松处理缺失值、重复值
- 高效合并多个数据集
二、环境准备:安装 Pandas
首先确保已安装 Python(推荐 3.7+),然后通过 pip 安装 Pandas:
# 终端/命令行执行
pip install pandas
# 若需读取Excel文件,额外安装openpyxl(处理.xlsx)和xlrd(处理.xls)
pip install openpyxl xlrd
安装完成后,在 Python 脚本 / Notebook 中导入:
import pandas as pd # 约定简写为pd,行业通用
三、核心数据结构:Series 与 DataFrame
Pandas 有两个核心数据结构,几乎所有操作都围绕它们展开:
1. Series:一维标签数组
类似 “带索引的列表”,由数据值和索引(index) 组成,支持多种数据类型(数值、字符串、日期等)。
# 创建Series(默认索引为0,1,2...)
s = pd.Series([10, 20, 30, 40], name="销量")
print(s)
# 输出结果:
# 0 10
# 1 20
# 2 30
# 3 40
# Name: 销量, dtype: int64
# 自定义索引
s = pd.Series([10, 20, 30, 40], index=["产品A", "产品B", "产品C", "产品D"], name="销量")
print(s["产品B"]) # 按索引取值,输出20
2. DataFrame:二维表格数据(重点)
类似 Excel 表格,由行索引(index) 、列名(columns) 和数据值(values) 组成,是 Pandas 最常用的数据结构。
# 方式1:字典创建DataFrame(键=列名,值=列数据)
data = {
"姓名": ["张三", "李四", "王五", "赵六"],
"年龄": [25, 32, 28, 40],
"城市": ["北京", "上海", "广州", "深圳"],
"薪资": [15000, 20000, 18000, 25000]
}
df = pd.DataFrame(data)
print(df)
# 输出结果(自动生成行索引0-3):
# 姓名 年龄 城市 薪资
# 0 张三 25 北京 15000
# 1 李四 32 上海 20000
# 2 王五 28 广州 18000
# 3 赵六 40 深圳 25000
# 方式2:读取外部文件(实际工作最常用)
# 读取CSV(最常用格式)
df_csv = pd.read_csv("data.csv") # 括号内为文件路径
# 读取Excel
df_excel = pd.read_excel("data.xlsx", sheet_name="Sheet1") # sheet_name指定工作表
四、数据查看:快速了解数据全貌
拿到 DataFrame 后,先通过以下方法快速摸清数据情况:
# 1. 查看前n行(默认5行,适合大文件)
print(df.head(3)) # 查看前3行
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 4 entries, 0 to 3 # 4行数据
# Data columns (total 4 columns): # 4列
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 姓名 4 non-null object # 字符串类型,无缺失值
# 1 年龄 4 non-null int64 # 整数类型,无缺失值
# 2 城市 4 non-null object
# 3 薪资 4 non-null int64
# dtypes: int64(2), object(2)
# memory usage: 256.0+ bytes
# 4. 查看数值型列的统计特征(均值、标准差、最值等)
print(df.describe()) # 仅对年龄、薪资等数值列生效
# 输出示例:
# 年龄 薪资
# count 4.000000 4.000000
# mean 31.250000 19500.000000 # 均值
# std 6.685097 4183.300133 # 标准差
# min 25.000000 15000.000000 # 最小值
# 25% 27.250000 17250.000000 # 25分位数
# 50% 30.000000 19000.000000 # 中位数(50分位数)
# 75% 34.000000 21250.000000 # 75分位数
# max 40.000000 25000.000000 # 最大值
# 5. 查看列名
print(df.columns.tolist()) # 输出['姓名', '年龄', '城市', '薪资']
五、数据筛选:提取需要的信息
筛选是数据处理的核心操作,Pandas 支持多种灵活的筛选方式:
1. 按列筛选(提取指定列)
# 方式1:单列(返回Series)
df_age = df["年龄"]
# 方式2:多列(返回DataFrame,注意双层括号)
df_name_salary = df[["姓名", "薪资"]]
print(df_name_salary)
2. 按行筛选(条件筛选)
# 条件1:年龄>30
df_age_gt30 = df[df["年龄"] > 30]
# 条件2:城市为上海
df_shanghai = df[df["城市"] == "上海"]
# 多条件组合(&=且,|=或,条件需加括号)
df_cond = df[(df["年龄"] > 28) & (df["薪资"] > 19000)] # 年龄>28且薪资>19000
print(df_cond)
3. 按行号 / 列号筛选(iloc 方法)
通过索引位置(0 开始)筛选,适合已知数据位置的场景:
# iloc[行索引, 列索引],支持切片
df_iloc = df.iloc[1:3, 0:2] # 行1-2(左闭右开),列0-1(姓名、年龄)
print(df_iloc)
六、数据清洗:处理缺失值与重复值
实际数据常存在缺失、重复等问题,Pandas 提供了简洁的处理方法:
1. 处理缺失值(NaN 表示)
# 先查看缺失值数量
print(df.isnull().sum()) # 按列统计缺失值
# 方式1:删除缺失值(适合缺失少量数据)
df_drop = df.dropna() # 删除包含缺失值的行
df_drop_col = df.dropna(axis=1) # 删除包含缺失值的列
# 方式2:填充缺失值(适合缺失较多数据)
df_fill = df.fillna({
"年龄": df["年龄"].mean(), # 数值列用均值填充
"城市": "未知" # 字符串列用固定值填充
})
2. 处理重复值
# 查看重复行数量
print(df.duplicated().sum())
# 删除重复行(保留第一行)
df_clean = df.drop_duplicates()
# 按指定列去重(如按姓名去重)
df_clean_name = df.drop_duplicates(subset=["姓名"], keep="last") # keep="last"保留最后一行
七、数据保存:将处理后的数据导出
处理完成后,可将 DataFrame 导出为 CSV、Excel 等格式:
# 导出CSV(index=False不保存行索引,推荐)
df_clean.to_csv("clean_data.csv", index=False, encoding="utf-8-sig") # utf-8-sig解决中文乱码
# 导出Excel
df_clean.to_excel("clean_data.xlsx", sheet_name="清洗后数据", index=False)
八、新手常见问题与注意事项
- 中文乱码:读取 / 保存时指定encoding="utf-8-sig"(CSV)或使用 openpyxl 引擎(Excel)。
- 索引问题:避免直接修改行索引,如需重置索引用df.reset_index(drop=True)。
- 数据类型:字符串列(object 类型)无法直接做数值运算,需用df["列名"].astype(int)转换类型。
- 链式操作:尽量避免多层链式操作(如df[df["年龄"]>30]["薪资"]=20000),可能导致 SettingWithCopyWarning 警告,建议用df.loc[df["年龄"]>30, "薪资"]=20000。
总结
Pandas 的基础操作核心围绕 “读取 - 查看 - 筛选 - 清洗 - 保存” 展开,掌握本文的 Series/DataFrame、数据查看、筛选、清洗等技能,就能应对 80% 的日常数据处理场景。
2647

被折叠的 条评论
为什么被折叠?



