切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
C# 基础
Mybatis
ADO.NET
ASP.NET
Python 基础
Linq
Web Forms
.NET
Spring
SpringBoot
SpringCloud
.NET Core 中间件
Maven
.NET 类库
ASP.NET MVC
EF
NHibernate
WebApi
Java
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
服务端
Python 库pandas介绍和使用
[TOC] ## pandas 介绍 pandas 是 Python 中一个强大的数据分析库,专门用于处理结构化数据(如表格、时间序列)。它提供了两种核心数据结构:Series(带标签的一维数组)和 DataFrame(带标签的二维表格),让数据清洗、转换、分析和可视化变得非常高效。 **主要作用:** + 数据读写:支持 CSV、Excel、SQL、JSON、Parquet 等格式。 + 数据清洗:处理缺失值、重复值、异常值,数据类型转换。 + 数据筛选与变换:按条件筛选行/列,新增/删除列,排序,分组聚合。 + 数据合并与连接:类似 SQL 的 join、concat 操作。 + 时间序列分析:处理日期范围、重采样、移动窗口等。 + 统计与探索性分析:快速计算均值、中位数、相关系数等,并生成描述性统计。 **能解决什么问题:** + 日常办公中的 Excel 报表自动化处理。 + 数据科学项目前的数据准备(90% 的数据分析工作可能是清洗与整理)。 + 数据库导出数据的快速探查与聚合。 + 金融、销售、日志等大规模表格数据的聚合与透视。 ## pandas 常用API概述 ### API目录 | API | 类别 | 简要作用 | |------|------|----------| | `pd.DataFrame` | 构造函数 | 创建二维表格 | | `df.info()` | 方法 | 查看数据摘要(类型、非空数) | | `df.describe()` | 方法 | 生成数值列的统计描述 | | `df['新列'] = ...` | 赋值 | 新增/修改列 | | `df.groupby()` | 方法 | 按列分组 | | `GroupBy.agg()` | 方法 | 对分组执行聚合 | | `df.rename()` | 方法 | 重命名列/索引 | | `df[布尔条件]` | 索引 | 布尔筛选行 | | `df.loc[]` | 属性 | 基于标签的取值/赋值 | | `df.isnull()` | 方法 | 检测缺失值 | | `df.sum()` | 方法 | 求和(常与 isnull 连用) | | `GroupBy.transform()` | 方法 | 分组后变换,保持原形状 | | `Series.fillna()` | 方法 | 填充缺失值 | | `df.sort_values()` | 方法 | 按列排序 | | `df.to_csv()` | 方法 | 导出为 CSV 文件 | | `print(df)` | 内置函数 | 友好打印 DataFrame | ### 1. pd.DataFrame() **作用**:创建 pandas 的核心数据结构——二维表格(DataFrame)。 **使用方式**:传入字典、列表、NumPy 数组等,字典的键成为列名,值为列数据。 **示例**: ```python import pandas as pd # 从字典创建,每个键对应一列 df = pd.DataFrame({ '姓名': ['张三', '李四'], '年龄': [25, 30] }) print(df) ``` ### 2. DataFrame.info() **作用**:查看 DataFrame 的简要摘要,包括索引类型、各列的非空值数量、数据类型、内存占用。 **使用方式**:直接作为方法调用,可选参数 `verbose` 控制是否输出完整信息。 **示例**: ```python df = pd.DataFrame({'A': [1, None, 3], 'B': ['x', 'y', 'z']}) df.info() # 显示列名、非空个数、类型 ``` ### 3. DataFrame.describe() **作用**:对数值列生成描述性统计(计数、均值、标准差、最小值、四分位数、最大值)。 **使用方式**:无参调用默认只统计数值列;参数 `include='all'` 可包含非数值列的简单统计。 **示例**: ```python df = pd.DataFrame({'分数': [85, 90, 78, 92], '年龄': [20, 21, 19, 22]}) print(df.describe()) ``` ### 4. 新增列:直接赋值 df['新列名'] = 值/计算表达式 **作用**:在 DataFrame 末尾添加新列(或覆盖已有列)。 **使用方式**:等号右侧可以是标量、列表、Series 或涉及其他列的运算。 **示例**: ```python df = pd.DataFrame({'单价': [10, 20], '数量': [2, 3]}) df['总价'] = df['单价'] * df['数量'] # 新增总价列 print(df) ``` ### 5. DataFrame.groupby(by) **作用**:根据一个或多个列的值对数据进行分组,为后续聚合、转换、过滤做准备。 **使用方式**:`by` 参数指定分组列名(字符串或列表),返回 `DataFrameGroupBy` 对象。 **示例**: ```python df = pd.DataFrame({'部门': ['销售', '技术', '销售'], '工资': [5000, 8000, 5200]}) grouped = df.groupby('部门') # 按部门分组 ``` ### 6. GroupBy.agg(func) **作用**:对分组后的数据执行一个或多个聚合函数(如 `mean`、`sum`、`size`)。 **使用方式**:传入函数名(字符串)或字典(列名 -> 聚合函数)。 **示例**: ```python result = df.groupby('部门').agg({'工资': 'mean'}) # 计算各部门平均工资 print(result) ``` ### 7. DataFrame.rename(columns=mapper) **作用**:重命名列名(或行索引)。 **使用方式**:`columns` 参数接收字典 `{'旧名':'新名'}`。 **示例**: ```python df = pd.DataFrame({'old': [1,2,3]}) df.rename(columns={'old': 'new'}, inplace=True) print(df) ``` ### 8. 布尔索引筛选 df[布尔条件] **作用**:根据条件筛选出行,返回满足条件的行的子集。 **使用方式**:在 `[]` 中放入布尔 Series,通常使用 `&`(与)、`|`(或)、`~`(非)组合多个条件。 **示例**: ```python df = pd.DataFrame({'A': [1,2,3,4], 'B': [5,6,7,8]}) filtered = df[(df['A'] > 2) & (df['B'] < 8)] # A>2 且 B<8 print(filtered) ``` ### 9. DataFrame.loc[] **作用**:基于**标签**(行名/列名)进行数据访问和修改。 **使用方式**:`df.loc[行标签, 列标签]`。行标签可以是单个标签、切片、列表或布尔数组。 **示例**: ```python df = pd.DataFrame({'分数': [80, 90, 85]}, index=['学生A', '学生B', '学生C']) df.loc['学生B', '分数'] = 95 # 修改单值 df.loc['学生D'] = [88] # 新增行(若不存在则添加) print(df) ``` ### 10. DataFrame.isnull() **作用**:检测 DataFrame 中每个元素是否为缺失值(`None` 或 `NaN`),返回布尔型 DataFrame。 **使用方式**:直接调用。 **示例**: ```python df = pd.DataFrame({'A': [1, None, 3]}) mask = df.isnull() print(mask) # 第二行为 True ``` ### 11. DataFrame.sum() **作用**:对数值列求和(默认按列)。若配合 `isnull()` 可计算每列缺失值个数。 **使用方式**:`df.sum(axis=0)`(axis=0 按列,axis=1 按行)。 **示例**: ```python df = pd.DataFrame({'A': [True, False, True]}) print(df.sum()) # 布尔值 True=1, False=0,结果为 2 ``` ### 12. GroupBy.transform(func) **作用**:对分组后的数据执行一个函数,返回与原始 DataFrame 相同形状的结果,常用于填充缺失值或标准化。 **使用方式**:`grouped.transform(lambda x: x.fillna(x.mean()))` 用组内均值填充缺失。 **示例**: ```python df = pd.DataFrame({ '组别': ['A','A','B','B'], '值': [1, None, 3, None] }) df['值'] = df.groupby('组别')['值'].transform(lambda x: x.fillna(x.mean())) print(df) # 缺失值被组内均值填充 ``` ### 13. Series.fillna(value) **作用**:将 Series 中的缺失值替换为指定值(标量、字典、Series 或向前/向后填充方法)。 **使用方式**:`series.fillna(0)` 或 `series.fillna(method='ffill')`。 **示例**: ```python s = pd.Series([1, None, 3]) s = s.fillna(0) print(s) # [1, 0, 3] ``` --- ### 14. DataFrame.sort_values(by, ascending) **作用**:根据一个或多个列的值对 DataFrame 排序。 **使用方式**:`by` 指定列名(字符串或列表),`ascending` 控制升序/降序。 **示例**: ```python df = pd.DataFrame({'姓名': ['张三','李四'], '年薪': [12, 15]}) df_sorted = df.sort_values('年薪', ascending=False) # 降序 print(df_sorted) ``` --- ### 15. DataFrame.to_csv(path, index, encoding) **作用**:将 DataFrame 写入 CSV 文件。 **使用方式**:`index=False` 不写出行索引,`encoding='utf-8-sig'` 可让 Excel 正常打开中文。 **示例**: ```python df = pd.DataFrame({'水果': ['苹果','香蕉'], '价格': [5, 3]}) df.to_csv('水果价格.csv', index=False, encoding='utf-8-sig') ``` --- ### 16. print() 显示 DataFrame 虽然 `print` 是 Python 内置函数,但 pandas 定制了 DataFrame 的字符串表示,会自动对齐、截断长表。 **作用**:在控制台友好地展示表格数据。 **示例**: ```python print(df) # 自动格式化为表格 ``` ## pandas 示例 ```python import pandas as pd # 1. 创建 DataFrame:从字典构造 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '部门': ['销售', '技术', '技术', '市场', '销售'], '底薪': [5000, 8000, 8500, 6000, 5200], '奖金': [2000, 3000, 3500, 1800, 2200], '入职年份': [2018, 2020, 2021, 2019, 2019] } df = pd.DataFrame(data) print("原始数据:") print(df) # 2. 查看数据基本信息 print("\n数据概览:") print(df.info()) # 列类型、非空计数 print("\n描述性统计:") print(df.describe()) # 数值列的统计信息 # 3. 增加新列:计算年薪(底薪+奖金)*12 df['年薪'] = (df['底薪'] + df['奖金']) * 12 print("\n添加年薪列后:") print(df) # 4. 按部门分组,计算平均底薪和总奖金 grouped = df.groupby('部门').agg({ '底薪': 'mean', # 平均底薪 '奖金': 'sum' # 奖金总额 }).rename(columns={'底薪': '平均底薪', '奖金': '奖金总额'}) print("\n部门统计:") print(grouped) # 5. 筛选数据:技术部门且年薪 > 12 万 tech_high_pay = df[(df['部门'] == '技术') & (df['年薪'] > 120000)] print("\n技术部门年薪超过12万的人:") print(tech_high_pay) # 6. 处理缺失值演示:人为添加一个缺失值,然后填充 df.loc[2, '奖金'] = None # 将王五的奖金设为缺失 print("\n含有缺失值的数据:") print(df) print("\n缺失值数量:") print(df.isnull().sum()) # 填充缺失值为所在部门的奖金均值 df['奖金'] = df.groupby('部门')['奖金'].transform(lambda x: x.fillna(x.mean())) print("\n按部门均值填充缺失后的数据:") print(df) # 7. 排序:按年薪降序排列 df_sorted = df.sort_values('年薪', ascending=False) print("\n按年薪降序排序:") print(df_sorted[['姓名', '部门', '年薪']]) # 8. 保存结果到 CSV 文件(不保存索引) df_sorted.to_csv('员工年薪表.csv', index=False, encoding='utf-8-sig') print("\n已保存到 员工年薪表.csv") ```
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号