人工智能之数据分析 Pandas
第四章 常用函数
文章目录
- [人工智能之数据分析 Pandas](#人工智能之数据分析 Pandas)
- 前言
- 一、数据创建与读取
- 二、数据基本信息查看
- 三、数据选择与筛选
- 四、排序(Sorting)
- 五、缺失值处理
- 六、去重与唯一值
- [七、分组与聚合(GroupBy + Agg)](#七、分组与聚合(GroupBy + Agg))
- [1. 基础聚合](#1. 基础聚合)
- [2. 命名聚合(推荐)](#2. 命名聚合(推荐))
- [3. 常用聚合函数](#3. 常用聚合函数)
- [4. 高级方法](#4. 高级方法)
- 八、数据变换与应用
- 九、字符串与时间操作
- [字符串(`.str` 访问器)](#字符串(
.str访问器))- [时间序列(`.dt` 访问器)](#时间序列(
.dt访问器))- 十、数据合并与重塑
- 十一、性能与工程建议
- 十二、高频函数速查表(一张图掌握)
- [✅ 总结](#✅ 总结)
- 后续
- 资料关注
前言
本文将Pandas 中最常用、最核心的函数与操作 进行系统性整合与分类整理 ,涵盖 数据创建、查看、筛选、排序、聚合、变换、合并、缺失值处理、字符串/时间操作 等全链路分析场景。内容结构清晰、示例简洁,便于学习与速查。
一、数据创建与读取
| 功能 | 函数/方法 | 示例 |
|---|---|---|
| 创建 DataFrame | pd.DataFrame() |
pd.DataFrame({'A': [1,2], 'B': ['x','y']}) |
| 从字典创建 | 同上 | pd.DataFrame(dict) |
| 从 CSV 读取 | pd.read_csv() |
pd.read_csv('data.csv', encoding='utf-8') |
| 写入 CSV | df.to_csv() |
df.to_csv('out.csv', index=False) |
| 从 Excel 读取 | pd.read_excel() |
pd.read_excel('file.xlsx', sheet_name='Sheet1') |
| 写入 Excel | df.to_excel() |
df.to_excel('out.xlsx', index=False) |
| 从 JSON 读取 | pd.read_json() |
pd.read_json('data.json') |
二、数据基本信息查看
| 功能 | 函数/属性 | 说明 |
|---|---|---|
| 前几行 | df.head(n=5) |
快速预览 |
| 后几行 | df.tail(n=5) |
查看末尾 |
| 形状 | df.shape |
(行数, 列数) |
| 列名 | df.columns |
返回 Index 对象 |
| 行索引 | df.index |
默认 RangeIndex |
| 数据类型 | df.dtypes |
每列 dtype |
| 内存与非空统计 | df.info() |
包含缺失值、内存占用 |
| 描述性统计 | df.describe() |
数值列的均值、std、分位数等 |
| 唯一值数量 | df.nunique() |
每列去重计数 |
| 全表转置 | df.T |
行列互换 |
三、数据选择与筛选
| 功能 | 方法 | 示例 |
|---|---|---|
| 选列(Series) | df['col'] |
df['姓名'] |
| 选多列(DataFrame) | df[['col1', 'col2']] |
注意双括号 |
| 按标签选行/列 | .loc[row, col] |
df.loc[0, '姓名'], df.loc[df['年龄']>30, ['姓名','工资']] |
| 按位置选行/列 | .iloc[row, col] |
df.iloc[0:2, 0:2] |
| 布尔索引 | df[condition] |
df[df['工资'] > 10000] |
| 条件查询(推荐) | df.query() |
df.query('工资 > 10000 and 部门 == "技术"') |
| 是否包含 | df.isin() |
df[df['部门'].isin(['技术','产品'])] |
⚠️ 避坑 :避免链式赋值(如
df[cond]['col'] = x),应使用.loc[cond, 'col'] = x
四、排序(Sorting)
| 功能 | 函数 | 示例 |
|---|---|---|
| 按值排序 | df.sort_values() |
df.sort_values('工资', ascending=False) |
| 多列排序 | 同上 | df.sort_values(['部门', '工资'], ascending=[True, False]) |
| 按索引排序 | df.sort_index() |
df.sort_index(), df.sort_index(axis=1) |
| 自定义顺序 | pd.Categorical |
见下文 |
自定义排序示例:
python
df['部门'] = pd.Categorical(df['部门'], categories=['技术', '产品', '销售'], ordered=True)
df.sort_values('部门')
五、缺失值处理
| 功能 | 函数 | 说明 |
|---|---|---|
| 判断缺失 | df.isnull() / pd.isna() |
返回布尔 DataFrame |
| 非缺失判断 | df.notnull() |
取反 |
| 删除缺失行 | df.dropna() |
axis=0(默认) |
| 删除缺失列 | df.dropna(axis=1) |
|
| 填充缺失值 | df.fillna(value) |
value 可为标量、字典、method |
| 向前/后填充 | df.fillna(method='ffill') |
时间序列常用 |
| 替换特定值为 NaN | df.replace(to_replace, np.nan) |
六、去重与唯一值
| 功能 | 函数 | 示例 |
|---|---|---|
| 删除重复行 | df.drop_duplicates() |
全行比较 |
| 按列去重 | df.drop_duplicates(subset=['姓名']) |
|
| 值频次统计 | s.value_counts() |
Series 方法 |
| 百分比频次 | s.value_counts(normalize=True) |
七、分组与聚合(GroupBy + Agg)
1. 基础聚合
python
df.groupby('部门')['工资'].mean()
df.groupby('部门').agg({'工资': 'mean', '姓名': 'count'})
2. 命名聚合(推荐)
python
df.groupby('部门', as_index=False).agg(
平均工资=('工资', 'mean'),
人数=('姓名', 'count'),
最高薪=('工资', 'max')
)
3. 常用聚合函数
| 函数 | 说明 |
|---|---|
'sum', 'mean', 'median' |
求和、均值、中位数 |
'min', 'max' |
极值 |
'std', 'var' |
标准差、方差 |
'count' |
非空计数 |
'nunique' |
唯一值数量 |
'first', 'last' |
首/末值 |
4. 高级方法
| 方法 | 用途 |
|---|---|
.transform() |
返回与原表同 shape,用于组内标准化 |
.apply() |
自定义复杂逻辑(性能较低) |
.filter() |
过滤满足条件的组(如 lambda g: len(g) > 5) |
八、数据变换与应用
| 功能 | 方法 | 示例 |
|---|---|---|
| 列向量化运算 | 直接操作 | df['新工资'] = df['工资'] * 1.1 |
| 应用函数(列/行) | df.apply(func, axis=0/1) |
df.apply(np.sum, axis=0) |
| Series 映射 | s.map(dict_or_func) |
s.map({'A':1, 'B':2}) |
| 条件赋值 | np.where() |
np.where(df['工资']>10000, '高', '低') |
| 分箱离散化 | pd.cut() / pd.qcut() |
pd.cut(s, bins=3) |
| 特征工程 | assign()(链式) |
df.assign(年薪=df['工资']*12) |
九、字符串与时间操作
字符串(.str 访问器)
python
df['姓名'].str.lower() # 转小写
df['邮箱'] = df['姓名'].str + '@company.com'
df[df['城市'].str.contains('京')] # 正则匹配
df['首字'] = df['姓名'].str[0]
时间序列(.dt 访问器)
python
df['日期'] = pd.to_datetime(df['日期'])
df['年'] = df['日期'].dt.year
df['月份'] = df['日期'].dt.month
df['工作日'] = df['日期'].dt.dayofweek < 5
十、数据合并与重塑
| 功能 | 函数 | 说明 |
|---|---|---|
| 上下拼接 | pd.concat([df1, df2]) |
axis=0(默认) |
| 左右拼接 | pd.concat([df1, df2], axis=1) |
|
| 类 SQL JOIN | pd.merge(df1, df2, on='key', how='left') |
支持 inner/left/right/outer |
| 透视表 | pd.pivot_table() |
多维汇总 |
| 宽变长 | df.melt() |
逆透视 |
| 长变宽 | df.pivot() |
透视表示例:
python
pd.pivot_table(df, values='工资', index='部门', columns='性别', aggfunc='mean', fill_value=0)
十一、性能与工程建议
| 场景 | 推荐做法 |
|---|---|
| 避免循环 | 用向量化操作替代 iterrows() |
| 内存优化 | astype('category')、int32 替代 int64 |
| 大文件处理 | pd.read_csv(..., chunksize=10000) |
| 链式编程 | 使用 assign()、pipe() 提高可读性 |
| 安全赋值 | 始终用 .loc 赋值,避免 SettingWithCopyWarning |
| 类型安全 | 整数列含缺失 → 用 'Int64'(注意大写 I) |
十二、高频函数速查表(一张图掌握)
| 类别 | 核心函数 |
|---|---|
| 创建/读取 | DataFrame(), read_csv(), to_excel() |
| 查看 | head(), info(), describe(), shape |
| 筛选 | .loc, .iloc, query(), isin() |
| 排序 | sort_values(), sort_index() |
| 缺失值 | isnull(), dropna(), fillna() |
| 去重 | drop_duplicates(), value_counts() |
| 聚合 | groupby().agg(), transform(), pivot_table() |
| 变换 | apply(), map(), assign(), np.where() |
| 字符串 | .str.lower(), .str.contains() |
| 时间 | pd.to_datetime(), .dt.year |
| 合并 | concat(), merge() |
✅ 总结
Pandas 的强大在于其一致性设计 和丰富生态:
- Series 和 DataFrame 是基石
- 向量化操作是性能关键
groupby+agg是分析核心.loc/.str/.dt是安全高效访问的保障
后续
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
资料关注
公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》