玩转python: 掌握Python常用库之数据分析pandas
pandas是Python中最强大的数据处理和分析库之一,它提供了高效、灵活且易于使用的数据结构,使数据清洗、转换和分析变得简单直观。
1、pandas库简介
pandas由Wes McKinney于2008年开发,名称来源于"panel data"(面板数据)和"Python data analysis"(Python数据分析)。它构建在NumPy之上,是数据科学领域的核心工具之一。
2、pandas核心数据结构
1. Series(一维数据)
import pandas as pd# 创建Series
s = pd.Series([1, 3, 5, 7, 9])
print(s)
"""
0 1
1 3
2 5
3 7
4 9
dtype: int64
"""
2. DataFrame(二维数据表)
# 创建DataFrame
data = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35],'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
print(df)
"""姓名 年龄 城市
0 张三 25 北京
1 李四 30 上海
2 王五 35 广州
"""
3、pandas核心功能
1. 数据读取与写入
# 读取CSV文件
df = pd.read_csv('data.csv')# 读取Excel文件
df = pd.read_excel('data.xlsx')# 写入文件
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', index=False)
2. 数据查看与筛选
# 查看前5行
print(df.head())# 查看统计信息
print(df.describe())# 条件筛选
young_people = df[df['年龄'] < 30]
beijing_people = df[df['城市'] == '北京']
3. 数据清洗
# 处理缺失值
df.fillna(0) # 用0填充
df.dropna() # 删除缺失值# 删除重复值
df.drop_duplicates()# 重命名列
df.rename(columns={'姓名': 'name', '年龄': 'age'}, inplace=True)
4. 数据排序
# 按年龄升序排序
df.sort_values('年龄')# 按年龄降序排序
df.sort_values('年龄', ascending=False)# 多列排序
df.sort_values(['城市', '年龄'])
5. 数据分组与聚合
# 按城市分组计算平均年龄
city_avg_age = df.groupby('城市')['年龄'].mean()# 多条件聚合
city_stats = df.groupby('城市').agg({'年龄': ['mean', 'max', 'min'],'姓名': 'count'
})
4、实际应用场景
1. 数据清洗与预处理
# 处理销售数据
sales = pd.read_csv('sales_data.csv')# 填充缺失值
sales['销售额'].fillna(sales['销售额'].mean(), inplace=True)# 转换日期格式
sales['日期'] = pd.to_datetime(sales['日期'])# 添加计算列
sales['利润率'] = (sales['利润'] / sales['销售额']) * 100
2. 金融数据分析
# 分析股票数据
stocks = pd.read_csv('stock_prices.csv')# 计算移动平均线
stocks['5日均线'] = stocks['收盘价'].rolling(5).mean()
stocks['20日均线'] = stocks['收盘价'].rolling(20).mean()# 计算每日收益率
stocks['日收益率'] = stocks['收盘价'].pct_change() * 100# 找出涨幅超过5%的交易日
big_gain_days = stocks[stocks['日收益率'] > 5]
3. 销售报表生成
# 生成月度销售报表
monthly_sales = sales.groupby(pd.Grouper(key='日期', freq='M')).agg({'销售额': 'sum','利润': 'sum','订单ID': 'count'
})# 计算各项指标
monthly_sales['平均订单金额'] = monthly_sales['销售额'] / monthly_sales['订单ID']
monthly_sales['利润率'] = (monthly_sales['利润'] / monthly_sales['销售额']) * 100# 保存报表
monthly_sales.to_excel('monthly_sales_report.xlsx')
4. 客户行为分析
# 分析电商用户行为
user_behavior = pd.read_csv('user_behavior.csv')# 计算RFM指标
now = pd.to_datetime('today')
rfm = user_behavior.groupby('用户ID').agg({'购买日期': lambda x: (now - x.max()).days, # 最近一次购买(R)'订单ID': 'count', # 购买频率(F)'订单金额': 'sum' # 购买金额(M)
})# 重命名列
rfm.columns = ['Recency', 'Frequency', 'Monetary']# RFM评分
rfm['R_Score'] = pd.qcut(rfm['Recency'], 5, labels=[5, 4, 3, 2, 1])
rfm['F_Score'] = pd.qcut(rfm['Frequency'], 5, labels=[1, 2, 3, 4, 5])
rfm['M_Score'] = pd.qcut(rfm['Monetary'], 5, labels=[1, 2, 3, 4, 5])# 计算RFM总分
rfm['RFM_Score'] = rfm['R_Score'].astype(int) + rfm['F_Score'].astype(int) + rfm['M_Score'].astype(int)
5. 时间序列分析
# 分析网站访问量
web_traffic = pd.read_csv('web_traffic.csv', parse_dates=['时间戳'])
web_traffic.set_index('时间戳', inplace=True)# 按小时重采样
hourly_visits = web_traffic['访问ID'].resample('H').count()# 计算7天移动平均
hourly_visits_7d_avg = hourly_visits.rolling(window=7*24).mean()# 找出访问高峰时段
peak_hours = hourly_visits[hourly_visits > hourly_visits.quantile(0.95)]
5、项目实际的场景案例-电商类
1. 订单数据处理
import pandas as pd# 读取电商订单数据
orders = pd.read_csv('ecommerce_orders.csv')# 查看数据结构
print(orders.info())# 处理日期字段
orders['order_date'] = pd.to_datetime(orders['order_date'])
orders['month'] = orders['order_date'].dt.month# 计算订单金额(单价×数量)
orders['total_amount'] = orders['unit_price'] * orders['quantity']# 查看销售额前10的商品
top_products = orders.groupby('product_name')['total_amount'].sum().nlargest(10)
print(top_products)
2. 用户行为分析
# 分析用户购买频率
user_activity = orders.groupby('user_id').agg(order_count=('order_id', 'count'),total_spent=('total_amount', 'sum'),last_order=('order_date', 'max')
)# 计算用户活跃天数
current_date = pd.to_datetime('today')
user_activity['days_since_last_order'] = (current_date - user_activity['last_order']).dt.days# 用户分层
user_activity['user_type'] = pd.cut(user_activity['days_since_last_order'],bins=[0, 30, 90, 365, float('inf')],labels=['活跃', '休眠', '流失', '失效']
)
6、金融数据处理案例–投资类
1. 股票数据分析
# 读取股票数据
stock_data = pd.read_csv('stock_prices.csv', parse_dates=['date'])
stock_data.set_index('date', inplace=True)# 计算技术指标
stock_data['5_day_ma'] = stock_data['close'].rolling(5).mean()
stock_data['20_day_ma'] = stock_data['close'].rolling(20).mean()
stock_data['daily_return'] = stock_data['close'].pct_change()# 找出金叉点(5日均线上穿20日均线)
stock_data['golden_cross'] = (stock_data['5_day_ma'] > stock_data['20_day_ma']) & \(stock_data['5_day_ma'].shift(1) <= stock_data['20_day_ma'].shift(1))
2. 投资组合分析
# 构建投资组合
portfolio = {'AAPL': 0.4,'MSFT': 0.3,'GOOG': 0.3
}# 计算组合每日收益
returns = pd.DataFrame()
for stock, weight in portfolio.items():returns[stock] = stock_data[stock_data['ticker'] == stock]['daily_return'] * weightportfolio_returns = returns.sum(axis=1)# 计算累计收益
cumulative_returns = (1 + portfolio_returns).cumprod()
7、pandas高级技巧
1. 数据透视表
# 创建销售数据透视表
pivot_table = pd.pivot_table(sales,values='销售额',index='销售区域',columns='产品类别',aggfunc='sum',fill_value=0,margins=True
)
2. 多表合并
# 合并订单表和客户表
orders = pd.read_csv('orders.csv')
customers = pd.read_csv('customers.csv')merged_data = pd.merge(orders,customers,how='left',on='客户ID'
)
3. 分类数据处理
# 将年龄分段
df['年龄分段'] = pd.cut(df['年龄'],bins=[0, 18, 30, 50, 100],labels=['未成年', '青年', '中年', '老年']
)# 查看各年龄段人数
print(df['年龄分段'].value_counts())
4. 向量化操作
# 高效计算(避免循环)
df['BMI'] = df['体重'] / (df['身高'] ** 2)# 条件赋值
df['健康状态'] = np.where(df['BMI'] > 25, '超重', '正常')
8、性能优化建议
- 使用向量化操作:避免使用循环,尽量使用pandas内置方法
- 选择合适的数据类型:如将字符串转换为category类型节省内存
- 使用query方法:大数据集筛选时更高效
- 分批处理:处理超大文件时使用chunksize参数
- 使用eval和query:对大型DataFrame进行复杂表达式计算
# 高效查询示例
large_df.query('销售额 > 1000 and 利润率 < 0.1', inplace=True)
总结
pandas作为Python数据科学生态系统的核心组件,提供了:
- 丰富的数据结构(Series和DataFrame)
- 强大的数据清洗和预处理能力
- 灵活的数据分组和聚合功能
- 高效的时间序列处理
- 便捷的数据可视化集成
无论是金融分析、销售报表、科学研究还是机器学习数据预处理,pandas都能提供高效、简洁的解决方案。掌握pandas可以让你在数据处理工作中事半功倍,将更多精力集中在分析而非数据准备上。
记住,pandas学习的最佳方式是通过实际项目练习。从简单的数据清洗开始,逐步尝试更复杂的数据分析任务,你会很快体会到这个库的强大之处。
相关文章:
玩转python: 掌握Python常用库之数据分析pandas
pandas是Python中最强大的数据处理和分析库之一,它提供了高效、灵活且易于使用的数据结构,使数据清洗、转换和分析变得简单直观。 1、pandas库简介 pandas由Wes McKinney于2008年开发,名称来源于"panel data"(面板数据…...
融合YOLO11与行为树的人机协作智能框架:动态工效学优化与自适应安全决策
人工智能技术要真正发挥其价值,必须与生产生活深度融合,为产业发展和人类生活带来实际效益。近年来,基于深度学习的机器视觉技术在工业自动化领域取得了显著进展,其中YOLO(You Only Look Once)算法作为一种…...
Postgresql源码(142)子查询提升pull_up_sublinks
1 案例 drop table t_fun01; create table t_fun01 (image_id numeric primary key, content_id varchar(50), file_code varchar(20)); create index idx3 on t_fun01(content_id); create index idx4 on t_fun01(file_code); insert into t_fun01 select t.i, t.i%10, t.i%1…...
通过 ECNWP 洋流、海浪可视化开发的方法和架构
第一篇:ECNWP 洋流、海浪可视化开发方法 1. 数据获取与预处理 ECNWP(Eastern Central North Pacific)区域的洋流和海浪数据通常来源于 NOAA、EMC 等权威机构。数据包括流速、流向、波高、波向、周期等。 代码示例:数据下载与预处理 import pandas as pd import numpy as…...
如何 编译 px4
DeepSeek-R1满血版 回答完成 深度思考完成 用时27秒,搜索全网29篇资料 以下是详细的PX4固件编译教程,综合多平台及常见问题解决方案: 一、环境准备 系统要求 Ubuntu 20.04/22.04(推荐)或 MacOS 12 Windo…...
23种设计模式-桥接(Bridge)设计模式
桥接设计模式 🚩什么是桥接设计模式?🚩桥接设计模式的特点🚩桥接设计模式的结构🚩桥接设计模式的优缺点🚩桥接设计模式的Java实现🚩代码总结🚩总结 🚩什么是桥接设计模式…...
【黑皮书】 AVL树
目录 前言 一 AVL树的介绍 二 单旋转 二 双旋转 总结 前言 AVL树的学习 一 AVL树的介绍 AVL树是带有平衡条件的二叉查找树,这个平衡条件要持续保持,而且必须保证树的深度为O(log(N))最简单的想法就是要求左右子树具有相同的高度 一棵AVL树是…...
【机器学习】什么是决策树?
什么是决策树? 决策树是一种用于分类和回归问题的模型。它通过一系列的“决策”将数据逐步分裂,最终得出预测结果。可以把它看作是一个“树”,每个节点表示一个特征的判断,而每个分支代表了可能的判断结果,最终的叶子…...
【商城实战(74)】数据采集与整理,夯实电商运营基石
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
使用独立服务器的最佳方式指南
在寻找合适的主机服务方案时,可以考虑独立服务器,因为它拥有管理员权限以及更高的性能配置。在本指南中,我们将介绍独立服务器的多种用途,并分析为什么选择独立服务器可能是处理高性能、资源密集型应用和大流量网站的最佳方案。 搭…...
视频格式转换:畅享多平台无缝视频体验
视频格式转换:畅享多平台无缝视频体验 视频已成为我们日常生活中不可或缺的一部分,不论是工作中展示方案的演示,还是生活里记录美好瞬间的短片,视频的存在无处不在。然而,面对各类设备、平台对视频格式的不同要求&…...
【HTML 基础教程】HTML 属性
HTML 属性 属性是 HTML 元素提供的附加信息。 属性通常出现在 HTML 标签的开始标签中,用于定义元素的行为、样式、内容或其他特性。 属性总是以 name"value" 的形式写在标签内,name 是属性的名称,value 是属性的值。 HTML 属性 …...
爬虫问题整理(2025.3.27)
此时此刻,困扰我一天的两个问题终于得到了解决,在此分享给大家。 问题1:使用anaconda prompt无法进行pip安装,这里只是一个示例,实际安装任何模块都会出现类似报错。 解决办法:关掉梯子......没错…...
短信验证码安全需求设计
背景: 近期发现部分系统再短信充值频繁,发现存在恶意消耗短信额度现象,数据库表排查,发现大量非合法用户非法调用短信接口API导致额度耗尽。由于系统当初设计存在安全缺陷,故被不法分子进行利用,造成损失。…...
若依专题——基础应用篇
若依搭建 搭建后端项目 ① Git 克隆并初始化项目 ② MySQL 导入与配置 ③ 启动 Redis 搭建后端项目注意事项? ① 项目初始化慢,执行clean、package ② MySQL导入后,修改application-druid.yml ③ Redis有密码,修改ap…...
给AI装“记忆U盘“:LangChain记忆持久化入门指南
🧠 什么是记忆持久化? 想象AI对话就像和朋友聊天: 普通模式:每次重启都忘记之前聊过什么持久化模式:给AI配了个"记忆U盘",聊天记录永不丢失 核心组件三件套 #mermaid-svg-ORm8cbBXsaRy2sZ…...
AI for CFD入门指南(传承版)
AI for CFD入门指南 前言适用对象核心目标基础准备传承机制 AI for CFDLibtorch的介绍与使用方法PytorchAutogluon MakefileVscodeOpenFOAMParaviewGambit 前言 适用对象 新加入课题组的硕士/博士研究生对AICFD交叉领域感兴趣的本科生实习生需要快速上手组内研究工具的合作研…...
DeepSeek+RAG局域网部署
已经有很多平台集成RAG模式,dify,cherrystudio等,这里通过AI辅助,用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit,答案流式输出,并且对答案加上索引。支持doc,docx,pdf,txt。…...
JavaScript快速入门之函数
引言 总所周知,JavaScript是一个很随便的语言,因此,在学习它的语法的时候,我是和Java语法对比着学的,可能会有些绕 函数 方法:对象(属性,方法) 函数:放在对…...
Java中synchronized 和 Lock
1. synchronized 关键字 工作原理 对象锁:在Java中,每个对象都有一个与之关联的监视器锁(monitor lock)。当一个线程尝试进入由 synchronized 保护的代码块或方法时,它必须首先获取该对象的监视器锁。如果锁已经被其…...
Linux系统-ls命令
一、ls命令的定义 Linux ls命令(英文全拼:list directory contents)用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 二、ls命令的语法 ls [选项] [目录或文件名] ls [-alrtAFR] [name...] 三、参数[选项…...
个人学习编程(3-24) 数据结构
括号的匹配: if((s[i]) && now() || (s[i]] && now[)){ #include <bits/stdc.h>using namespace std;int main() {char s[300];scanf("%s",&s);int i;int len strlen(s);stack <char> st;for (i 0; i < len; i){if(…...
.NET开源的智能体相关项目推荐
一、AntSK 由AIDotNet团队开发的人工智能知识库与智能体框架,支持多模型集成和离线部署能力。 核心能力: • 支持OpenAI、Azure OpenAI、星火、阿里灵积等主流大模型,以及20余种国产数据库(如达梦) • 内置语义内核&a…...
面试八股文--框架篇(SSM)
一、Spring框架 1、什么是spring Spring框架是一个开源的Java平台应用程序框架,由Rod Johnson于2003年首次发布。它提供了一种全面的编程和配置模型,用于构建现代化的基于Java的企业应用程序。Spring框架的核心特性包括依赖注入(DI…...
跨语言语言模型预训练
摘要 最近的研究表明,生成式预训练在英语自然语言理解任务中表现出较高的效率。在本研究中,我们将这一方法扩展到多种语言,并展示跨语言预训练的有效性。我们提出了两种学习跨语言语言模型(XLM)的方法:一种…...
[识记]Mysql8 远程授权
今天在测试docker时,因更换为Mysql8,使用SQL方式实现远程授权,其方式方法同于Mysql,但语句稍有不同,仅供参考。 登录mysql mysql -u root -p 输入密码: [请依据交互输入你的mysql密码]切换数据库 use mysql;选择需要…...
Nodejs上传文件的问题
操作系统:window和linux都会遇到 软件环境:v20.10.0的Nodejs 1、前端代码如下: 2、后端Nodejs 2.1、注册接口 2.2、上传接口 其中memoryUpload方法代码如下: 3、用页面上传文件 查看具体报错原因: TypeError: sourc…...
无人机螺旋桨平衡标准
螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音,并加速关键部件的磨损,从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架,定义了可接受的不平衡…...
Qt开发:双缓冲机制
文章目录 什么是双缓冲机制?Qt 中的双缓冲实现方式 什么是双缓冲机制? 双缓冲(Double Buffering) 是一种减少屏幕绘制闪烁的技术,广泛用于图形渲染和游戏开发。 它的基本原理是: 先在后台缓冲区࿰…...
HandyJSON原理
HandyJSON 的优势 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式, 应用广泛. 在 App 的使用过程中, 服务端给移动端发送的大部分都是 JSON 数据, 移动端需要解析数据才能做进一步的处理. 在解析JSON数据这一块, 目前 Swift 中流行的框架基本上是 SwiftyJSON, …...
