长沙网站设计流程,企业网站规划案例,网站建设概算,官方网站开发合同作者#xff1a;海天一色y日期#xff1a;2026-03-03一、Pandas 是什么#xff1f;Pandas 是 Python 生态系统中最重要的数据分析库之一#xff0c;由 Wes McKinney 于2008年开发。它建立在 NumPy 之上#xff0c;提供了高性能、易用的数据结构和数据分析工具#xff0c;…作者海天一色y日期2026-03-03一、Pandas 是什么Pandas是 Python 生态系统中最重要的数据分析库之一由 Wes McKinney 于2008年开发。它建立在 NumPy 之上提供了高性能、易用的数据结构和数据分析工具让处理结构化数据变得前所未有的简单。核心定位数据清洗处理缺失值、重复数据、格式转换数据转换合并、重塑、透视表数据分析分组统计、时间序列分析数据可视化与 Matplotlib/Seaborn 无缝集成二、核心数据结构Pandas 提供两种主要的数据结构理解它们是掌握 Pandas 的关键。2.1 Series一维数据Series 是带标签的一维数组可以存储任意数据类型。import pandas as pd import numpy as np ​ # 创建 Series s pd.Series([1, 3, 5, np.nan, 6, 8]) print(s)输出0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64关键特性自动索引0,1,2...或自定义索引支持缺失值NaN支持向量化运算2.2 DataFrame二维数据DataFrame 是带标签的二维表格数据结构是 Pandas 最常用的对象。# 创建 DataFrame dates pd.date_range(20260101, periods6) df pd.DataFrame(np.random.randn(6, 4), indexdates, columnslist(ABCD)) ​ print(df)输出A B C D 2026-01-01 0.469112 -0.282863 -1.509059 -1.135632 2026-01-02 1.212112 -0.173215 0.119209 -1.044236 ...DataFrame 构成要素组件说明index行标签行索引columns列标签列名values底层 NumPy 数组dtypes每列的数据类型三、数据读取与写入Pandas 支持几乎所有主流数据格式# CSV 文件 df pd.read_csv(data.csv) df.to_csv(output.csv, indexFalse) ​ # Excel 文件 df pd.read_excel(data.xlsx, sheet_nameSheet1) df.to_excel(output.xlsx, sheet_nameSheet1) ​ # SQL 数据库 from sqlalchemy import create_engine engine create_engine(sqlite:///:memory:) df.to_sql(my_table, engine) ​ # JSON 数据 df pd.read_json(data.json) ​ # 从字典创建 data {name: [Alice, Bob], age: [25, 30]} df pd.DataFrame(data)四、数据查看与选择4.1 基础查看df.head(5) # 前5行 df.tail(3) # 后3行 df.shape # 维度 (行数, 列数) df.columns # 列名 df.index # 索引 df.describe() # 统计摘要 df.info() # 详细信息4.2 数据选择Pandas 提供多种选择数据的方式推荐使用.loc和.iloc# 按列选择 df[A] # 选择单列返回 Series df[[A, B]] # 选择多列返回 DataFrame ​ # 按行选择不推荐直接用索引 df[0:3] # 切片选择前3行 ​ # 标签选择 .loc[] df.loc[20260101] # 选择单行 df.loc[:, [A, B]] # 选择多列 df.loc[20260101:20260103, A:C] # 行列切片 ​ # 位置选择 .iloc[] df.iloc[3] # 第4行从0开始 df.iloc[3:5, 0:2] # 行3-4列0-1 df.iloc[[1, 2, 4], [0, 2]] # 特定行列 ​ # 布尔索引条件筛选 df[df[A] 0] # A列大于0的行 df[(df[A] 0) (df[B] 0)] # 多条件组合 df[df[A].isin([1, 2, 3])] # 包含判断五、数据清洗Data Cleaning真实数据往往 messyPandas 提供了强大的清洗工具5.1 处理缺失值# 检测缺失值 df.isnull() # 返回布尔矩阵 df.isnull().sum() # 每列缺失值计数 ​ # 删除缺失值 df.dropna() # 删除包含NaN的行 df.dropna(axis1) # 删除包含NaN的列 df.dropna(howall) # 只删除全为NaN的行 ​ # 填充缺失值 df.fillna(0) # 用0填充 df.fillna(df.mean()) # 用均值填充 df.fillna(methodffill) # 前向填充 df.fillna(methodbfill) # 后向填充 df.interpolate() # 插值填充5.2 处理重复值df.duplicated() # 检测重复行 df.drop_duplicates() # 删除重复行 df.drop_duplicates(subset[A, B], keeplast) # 基于特定列5.3 数据类型转换df[A].astype(float) # 转换为浮点型 df[B].astype(category) # 转换为类别型节省内存 pd.to_datetime(df[date]) # 转换为日期时间 pd.to_numeric(df[col], errorscoerce) # 强制转换无效值变NaN5.4 字符串处理df[name].str.lower() # 转小写 df[name].str.contains(John) # 包含判断 df[name].str.replace(a, b)# 替换 df[email].str.split() # 分割 df[name].str[:3] # 切片六、数据转换与重塑6.1 应用函数# apply沿轴应用函数 df.apply(np.cumsum) # 累积和 df.apply(lambda x: x.max() - x.min()) # 极差 ​ # applymap逐元素应用仅DataFrame df.applymap(lambda x: len(str(x))) ​ # map仅用于 Series df[A].map(lambda x: x**2)6.2 数据合并# concat轴向连接 pd.concat([df1, df2]) # 纵向拼接行 pd.concat([df1, df2], axis1) # 横向拼接列 ​ # merge数据库风格的合并 pd.merge(df1, df2, onkey) # 内连接 pd.merge(df1, df2, onkey, howleft) # 左连接 pd.merge(df1, df2, left_onlkey, right_onrkey) # 不同键名 ​ # join基于索引合并 df1.join(df2, howouter)6.3 数据重塑# pivot透视表 df.pivot(indexdate, columnsvariable, valuesvalue) ​ # melt宽格式转长格式 pd.melt(df, id_vars[id], value_vars[A, B]) ​ # stack/unstack层级索引操作 df.stack() # 列旋转为行 df.unstack() # 行旋转为列 ​ # pivot_table高级透视表 df.pivot_table(valuesD, indexA, columnsB, aggfuncnp.sum)七、分组与聚合GroupBy这是 Pandas 最强大的功能之一遵循Split-Apply-Combine策略# 基础分组 df.groupby(A).sum() # 按A分组求和 df.groupby([A, B]).mean() # 多列分组求均值 ​ # 多聚合操作 df.groupby(A).agg({ B: [min, max, mean], C: sum }) ​ # 转换保持原形状 df.groupby(A).transform(lambda x: (x - x.mean()) / x.std()) ​ # 过滤 df.groupby(A).filter(lambda x: x[B].sum() 100) ​ # apply自定义操作 df.groupby(A).apply(lambda x: x.sort_values(B).iloc[0])八、时间序列处理Pandas 最初就是为金融时间序列分析设计的# 创建时间范围 rng pd.date_range(2026-01-01, periods100, freqD) # 日频 rng pd.date_range(2026-01-01, periods12, freqM) # 月频 ​ # 时间索引 ts pd.Series(np.random.randn(len(rng)), indexrng) ​ # 重采样Resampling ts.resample(M).mean() # 降采样月均值 ts.resample(D).interpolate() # 升采样插值 ​ # 移动窗口 ts.rolling(window7).mean() # 7日移动平均 ts.expanding().sum() # 扩展窗口求和 ​ # 时间偏移 ts.shift(1) # 滞后1期 ts.shift(-1) # 超前1期 ​ # 时区处理 ts_utc ts.tz_localize(UTC) ts_sh ts_utc.tz_convert(Asia/Shanghai)九、性能优化技巧9.1 内存优化# 查看内存使用 df.info(memory_usagedeep) ​ # 优化数据类型 df[int_col] df[int_col].astype(int32) # 默认 int64 → int32 df[float_col] df[float_col].astype(float32) df[category_col] df[category_col].astype(category) # 类别型9.2 向量化操作避免循环使用向量化操作# ❌ 慢Python 循环 result [] for idx, row in df.iterrows(): result.append(row[A] row[B]) ​ # ✅ 快向量化 result df[A] df[B] ​ # ✅ 更快NumPy 底层 result df[A].values df[B].values9.3 使用 eval/query# 大型 DataFrame 的表达式计算 df.eval(C A B, inplaceTrue) df.query(A 0 and B 0)思考题在处理一个 10GB 的 CSV 文件时如何在不耗尽内存的情况下计算某列的均值提示考虑chunksize参数或 Dask十、实战案例数据分析流程下面是一个完整的数据分析流程示例import pandas as pd import numpy as np ​ # 1. 加载数据 df pd.read_csv(sales_data.csv, parse_dates[date]) ​ # 2. 数据清洗 df.drop_duplicates(inplaceTrue) df.dropna(subset[sales, quantity], inplaceTrue) df[category] df[category].astype(category) ​ # 3. 特征工程 df[revenue] df[sales] * df[quantity] df[month] df[date].dt.to_period(M) ​ # 4. 数据分析 monthly_sales df.groupby(month)[revenue].sum() category_stats df.groupby(category).agg({ revenue: [sum, mean, count], quantity: sum }) ​ # 5. 透视分析 pivot df.pivot_table( valuesrevenue, indexmonth, columnscategory, aggfuncsum, fill_value0 ) ​ # 6. 导出结果 monthly_sales.to_csv(monthly_report.csv) category_stats.to_excel(category_report.xlsx)十一、Pandas 3.0 新特性2024Pandas 3.0 带来了重大更新PyArrow 后端默认使用 PyArrow 字符串类型大幅减少内存占用Copy-on-Write默认启用避免意外的数据修改改进的异常信息更清晰的错误提示弃用警告移除旧版弃用功能# 启用 PyArrow 后端推荐 df pd.read_csv(data.csv, dtype_backendpyarrow)十二、学习资源推荐资源链接说明官方文档pandas.pydata.org最权威参考Pandas CookbookGitHub 搜索实战技巧合集《Python for Data Analysis》Wes McKinney 著作者亲著Kaggle Learnkaggle.com/learn免费交互课程Pandas 是 Python 数据科学生态的基石掌握它需要理解数据结构Series 和 DataFrame 的本质熟练选择数据loc/iloc 的区别与应用场景掌握清洗技巧处理真实世界的脏数据善用分组聚合高效的数据汇总分析注意性能优化避免低效循环善用向量化最佳实践建议始终使用.loc和.iloc而不是链式索引df[...][...]处理大型数据集时考虑使用 PyArrow 或 Dask善用inplaceTrue减少内存拷贝但要注意副作用代码中保留数据处理的注释便于复现分析流程希望这篇博客能帮助您系统掌握 Pandas如有疑问欢迎在评论区讨论。