Pandas
系列文章导航在大数据与 AI 驱动的时代,数据预处理和分析是深度学习与机器学习的基石。Pandas 作为 Python 生态中最强大的数据处理库,以其灵活的数据结构(如 DataFrame 和 Series)和丰富的功能(数据清洗、转换、聚合等),成为数据科学家和工程师的核心工具。
Pandas 以 Series(一维标签数组)和 DataFrame(二维表格)为核心数据结构,提供高效的数据处理能力,涵盖数据清洗(缺失值处理、去重)、筛选(loc/iloc
)、聚合(groupby
)、合并(merge/concat
)及时间序列分析(日期解析、重采样)等关键功能。其优势在于:
category
类型减少内存占用。Pandas数据处理全流程:
入门需掌握基础 API(如 read_csv
、describe
),并通过实战(如电商分析、时序预测)深化理解。官方文档与《Python for Data Analysis》是经典学习资源,适合快速处理结构化数据并赋能 AI 工程。
venv
或 conda
)隔离项目依赖。# 基础安装(仅 Pandas)
pip install pandas
# 国内镜像加速(解决下载慢问题)
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
# 通过 conda 安装(自动处理依赖)
conda install pandas
# 或指定版本
conda install pandas=2.2.0
git clone https://github.com/pandas-dev/pandas.git
cd pandas
python setup.py install
import pandas as pd
print(pd.__version__) # 输出版本号(如 2.2.0)
pip install --upgrade pandas
升级至最新版本。sudo
(Linux/macOS)或以管理员身份运行终端(Windows)。pip install pandas numpy matplotlib scikit-learn
python -m pandas
或访问 官网文档)。pd.Series([10,20], index=['a','b'])
)。dropna()
删除缺失值、fillna()
填充、drop_duplicates()
去重,快速修复脏数据。loc
(标签索引)、iloc
(位置索引)、query()
(SQL 式条件过滤)。merge()
实现表连接、concat()
轴向拼接。groupby()
结合 agg()
计算多维度统计量(如均值、总和)。pd.to_datetime()
)、重采样(resample()
)、滚动窗口计算,适用于金融分析或物联网数据。df.plot()
生成柱状图、折线图等。df * 2
比循环快千倍)。category
类型减少字符串存储空间,eval()
提升表达式计算效率。# 创建 Series
import pandas as pd
price_series = pd.Series([9.9, 15.8, 4.5], name="商品价格", index=["苹果", "牛奶", "面包"])
# 创建 DataFrame
product_df = pd.DataFrame({
"品类": ["水果", "乳制品", "烘焙"],
"库存量": [50, 20, 35],
"单价": [9.9, 15.8, 4.5]
}, index=["苹果", "牛奶", "面包"])
⚠️ 避免直接修改 df.values
数组,这会破坏索引对齐机制。
⚠️ 创建 DataFrame 时,字典值的长度必须一致,否则会触发 ValueError
。
# 从 CSV 读取数据(自动识别日期)
sales_data = pd.read_csv("sales.csv", parse_dates=["order_date"])
# 数据预览技巧
print(sales_data.head(3)) # 查看前三行
print(sales_data.describe()) # 数值列统计摘要
print(sales_data.dtypes) # 查看列数据类型
parse_dates
参数可将字符串自动转为 datetime 类型。head()
+ describe()
组合快速掌握数据分布特征。⚠️ 读取 Excel 时需额外安装 openpyxl
库:pip install openpyxl
。
⚠️ 大数据文件使用 chunksize
分块读取:
for chunk in pd.read_csv("big_data.csv", chunksize=10000):
process(chunk)
# 处理缺失值
sales_clean = sales_data.dropna(subset=["price"]) # 删除 price 列缺失行
sales_data["price"].fillna(sales_data["price"].median(), inplace=True)
# IQR 法处理异常值
Q1 = sales_data["sales"].quantile(0.25)
Q3 = sales_data["sales"].quantile(0.75)
sales_data = sales_data[~((sales_data["sales"] < (Q1-1.5*(Q3-Q1))) |
(sales_data["sales"] > (Q3+1.5*(Q3-Q1))))]
dropna
)、填充 (fillna
)、插值 (interpolate
)。inplace=True
减少内存占用。⚠️ fillna(method="ffill")
向前填充时,需先按时间排序避免逻辑错误。
⚠️ 删除缺失值前务必检查 df.isna().sum()
,避免误删有效数据。
# 单维度聚合
category_sales = sales_data.groupby("category")["sales"].sum()
# 多维度高级聚合
sales_stats = sales_data.groupby(["region", "year"]).agg(
total_sales=("sales", "sum"),
avg_price=("price", "mean"),
max_quantity=("quantity", "max")
)
groupby
本质是 “拆分-应用-合并” 三阶段操作。agg
+ 元组)提升可读性。pd.cut
进行分箱分析可挖掘深层规律。⚠️ 分组键包含 NaN 时会自动创建名为 NaN
的组,建议提前处理。
⚠️ 避免在分组后直接修改数据,应使用 transform
或 apply
。
# 横向拼接(列扩展)
combined = pd.concat([df1, df2], axis=1)
# 数据库风格连接
merged_data = pd.merge(orders, customers,
how="left",
left_on="customer_id",
right_on="id")
# 索引对齐合并
joined_df = df1.join(df2, how="inner")
concat
适合简单堆叠,merge
适合键关联合并。df.duplicated().sum()
。pd.merge(ordered=True)
保持顺序。⚠️ 多对多连接会产生笛卡尔积,导致数据量爆炸式增长。
⚠️ 合并后出现大量 NaN 值时,检查连接键的数据类型是否一致。
category
类型可降内存 80%。df["gender"] = df["gender"].astype("category")
df["col1"] + df["col2"]
替代循环。df.query("price > 100")
比布尔索引更快。Pandas 的核心价值在于将复杂的数据操作简化为高效、可读的代码。通过本文,读者可掌握:
本章完成了 Pandas 入门知识的核心讲解。下篇将深入探讨进阶主题,包括高级数据处理技巧、性能调优、以及在深度学习中的应用。敬请期待!