news 2026/4/3 4:33:31

[特殊字符] 熊猫之力:从零开始解锁pandas的强大能力

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符] 熊猫之力:从零开始解锁pandas的强大能力

🎯 为什么学习Pandas?

在数据科学的世界里,80%的时间都花在数据清洗和预处理上。Pandas作为Python数据分析的核心库,就像数据分析师的“瑞士军刀”,能帮你高效处理结构化数据,让数据从原始状态变成有价值的洞察。

想象一下:几行代码就能完成Excel中数小时的手工操作,这不仅是效率的提升,更是思维的解放!

📦 快速安装与导入

# 安装pandas pip install pandas # 通常与numpy一起使用 pip install pandas numpy python import pandas as pd import numpy as np print(f"Pandas版本: {pd.__version__}")

🏗️ 两大核心数据结构

1. Series:一维数据容器

Series就像带标签的数组,是构建DataFrame的基础。

# 创建Series的多种方式 temperature = pd.Series([22.5, 24.0, 21.8, 23.5, 25.2], index=['周一', '周二', '周三', '周四', '周五'], name='温度') print(f"温度序列:\n{temperature}") print(f"数据类型: {temperature.dtype}") print(f"最大值: {temperature.max()}℃")

2. DataFrame:二维数据表格

DataFrame是pandas的灵魂,你可以把它想象成Excel表格或SQL表。

# 创建员工信息表 employees = pd.DataFrame({ '员工ID': ['E001', 'E002', 'E003', 'E004'], '姓名': ['张明', '李华', '王芳', '赵强'], '部门': ['技术部', '市场部', '技术部', '人事部'], '入职年份': [2019, 2020, 2021, 2018], '月薪(元)': [15000, 12000, 13000, 11000], '绩效评级': ['A', 'B', 'A', 'C'] }) print("员工信息表:") print(employees)

📁 数据读写:连接现实世界

读取数据(支持30+格式!)

# 读取各种格式的数据 csv_data = pd.read_csv('data/sales.csv', encoding='utf-8') # CSV文件 excel_data = pd.read_excel('data/report.xlsx', sheet_name='Sheet1') # Excel json_data = pd.read_json('data/config.json') # JSON sql_data = pd.read_sql('SELECT * FROM users', connection) # SQL数据库 # 读取网络数据 url_data = pd.read_csv('https://raw.githubusercontent.com/dataset/data.csv')

保存处理结果

# 保存为不同格式 employees.to_csv('output/employees_processed.csv', index=False, encoding='utf-8') employees.to_excel('output/report.xlsx', sheet_name='员工信息') employees.to_json('output/data.json', orient='records', force_ascii=False)

🔍 数据探索:第一眼看数据

# 快速了解数据全貌 print("=== 数据概览 ===") print(f"数据形状: {employees.shape}") # (行数, 列数) print(f"\n前3行数据:") print(employees.head(3)) print(f"\n数据信息:") employees.info() print(f"\n统计摘要:") print(employees.describe()) print(f"\n数值列统计:") print(employees.describe(include=[np.number])) print(f"\n非数值列统计:") print(employees.describe(include=[object])) print(f"\n缺失值统计:") print(employees.isnull().sum())

🎯 数据选择:精准定位目标

选择列数据

# 选择单列(返回Series) names = employees['姓名'] # 选择多列(返回DataFrame) personal_info = employees[['姓名', '部门', '入职年份']] # 使用点号选择(列名不含空格时可用) departments = employees.部门

选择行数据

# 按位置选择(iloc) first_row = employees.iloc[0] # 第一行 first_three = employees.iloc[:3] # 前三行 specific_rows = employees.iloc[[0, 2, 3]] # 第1,3,4行 # 按标签选择(loc) row_by_index = employees.loc[0] # 索引为0的行 # 条件筛选(最常用!) tech_dept = employees[employees['部门'] == '技术部'] high_salary = employees[employees['月薪(元)'] > 12000] tech_and_high = employees[(employees['部门'] == '技术部') & (employees['月薪(元)'] > 12000)] # 优雅的条件查询 result = employees.query('部门 == "技术部" and `月薪(元)` > 12000')

🛠️ 数据处理:从杂乱到整洁

处理缺失值

# 创建含缺失值的数据示例 data_with_na = pd.DataFrame({ 'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12] }) print("原始数据:") print(data_with_na) print("\n删除缺失值:") print(data_with_na.dropna()) # 删除含NA的行 print("\n填充缺失值:") print(data_with_na.fillna(0)) # 用0填充 print(data_with_na.fillna({'A': data_with_na['A'].mean(), # 列A用均值填充 'B': data_with_na['B'].median()})) # 列B用中位数填充

数据转换

# 添加新列 employees['年薪(元)'] = employees['月薪(元)'] * 12 employees['工龄'] = 2024 - employees['入职年份'] employees['是否技术部'] = np.where(employees['部门'] == '技术部', '是', '否') # 修改现有列 employees['姓名'] = employees['姓名'].str.upper() # 转为大写 employees['月薪(万元)'] = employees['月薪(元)'] / 10000 # 单位转换 print("转换后的数据:") print(employees)

排序与去重

# 单列排序 sorted_by_salary = employees.sort_values('月薪(元)', ascending=False) # 多列排序 sorted_multi = employees.sort_values(['部门', '月薪(元)'], ascending=[True, False]) # 去除重复行 unique_depts = employees['部门'].drop_duplicates()

📊 数据分析:挖掘数据价值

分组聚合(GroupBy的强大功能)

print("=== 部门统计分析 ===") # 基础分组 dept_stats = employees.groupby('部门').agg({ '月薪(元)': ['mean', 'max', 'min', 'sum', 'count'], '入职年份': 'mean', '员工ID': 'count' }) dept_stats.columns = ['平均月薪', '最高月薪', '最低月薪', '月薪总额', '人数', '平均入职年份', '员工总数'] print(dept_stats) # 更复杂的分组操作 complex_stats = employees.groupby(['部门', '绩效评级']).agg({ '月薪(元)': ['mean', 'std'], '员工ID': 'count' }).round(2) print("\n部门-绩效交叉统计:") print(complex_stats)

数据透视表(Pivot Table)

# 创建数据透视表(类似Excel数据透视表) pivot_table = pd.pivot_table(employees, values='月薪(元)', index='部门', columns='绩效评级', aggfunc=['mean', 'count'], fill_value=0) print("数据透视表:") print(pivot_table)

数据合并

# 创建额外数据 bonus_data = pd.DataFrame({ '员工ID': ['E001', 'E002', 'E003'], '年终奖': [30000, 20000, 25000] }) # 合并数据 merged_data = pd.merge(employees, bonus_data, on='员工ID', how='left') merged_data['年总收入'] = merged_data['年薪(元)'] + merged_data['年终奖'].fillna(0) print("\n合并后的完整数据:") print(merged_data)

🎨 数据可视化:让数据说话

import matplotlib.pyplot as plt # 设置中文字体(如果需要) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 创建图表 fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # 1. 部门人数柱状图 dept_counts = employees['部门'].value_counts() dept_counts.plot(kind='bar', ax=axes[0, 0], color='skyblue') axes[0, 0].set_title('各部门人数分布') axes[0, 0].set_ylabel('人数') # 2. 薪资分布直方图 employees['月薪(元)'].plot(kind='hist', bins=10, ax=axes[0, 1], alpha=0.7, color='lightgreen') axes[0, 1].set_title('薪资分布直方图') axes[0, 1].set_xlabel('月薪(元)') # 3. 箱线图查看薪资分布 employees.boxplot(column='月薪(元)', by='部门', ax=axes[1, 0]) axes[1, 0].set_title('各部门薪资分布(箱线图)') axes[1, 0].set_ylabel('月薪(元)') # 4. 散点图:工龄vs薪资 axes[1, 1].scatter(employees['入职年份'], employees['月薪(元)'], c='red', alpha=0.6) axes[1, 1].set_title('入职年份与薪资关系') axes[1, 1].set_xlabel('入职年份') axes[1, 1].set_ylabel('月薪(元)') plt.tight_layout() plt.savefig('output/analysis_charts.png', dpi=300, bbox_inches='tight') plt.show()

💼 实战案例:销售数据分析

# 创建模拟销售数据 np.random.seed(42) # 设置随机种子保证可重复性 dates = pd.date_range('2024-01-01', '2024-03-31', freq='D') sales_data = pd.DataFrame({ '日期': dates, '产品类别': np.random.choice(['电子产品', '服装', '食品', '书籍'], len(dates)), '销售额': np.random.randint(100, 5000, len(dates)), '销售量': np.random.randint(1, 100, len(dates)), '地区': np.random.choice(['华北', '华东', '华南', '西部'], len(dates)) }) print("=== 销售数据分析报告 ===")

# 1. 总体统计

print(f"分析周期: {sales_data['日期'].min().date()} 至 {sales_data['日期'].max().date()}") print(f"总销售额: ¥{sales_data['销售额'].sum():,.2f}") print(f"日均销售额: ¥{sales_data['销售额'].mean():,.2f}")

# 2. 按产品类别分析

product_analysis = sales_data.groupby('产品类别').agg({ '销售额': ['sum', 'mean', 'count'], '销售量': 'sum' }).round(2) product_analysis.columns = ['总销售额', '平均销售额', '销售天数', '总销售量'] product_analysis['销售占比'] = (product_analysis['总销售额'] / product_analysis['总销售额'].sum() * 100).round(1) print("\n产品类别分析:") print(product_analysis)

# 3. 时间序列分析

sales_data['月份'] = sales_data['日期'].dt.to_period('M') monthly_sales = sales_data.groupby('月份')['销售额'].sum() print("\n月度销售趋势:") for month, sales in monthly_sales.items(): print(f"{month.strftime('%Y年%m月')}: ¥{sales:,.2f}") # 4. 地区表现 region_analysis = sales_data.groupby('地区').agg({ '销售额': ['sum', 'mean'], '销售量': 'sum' }) print("\n地区销售表现:") print(region_analysis)

📚 学习资源推荐

官方资源

  • 📖 官方文档 - 最权威的参考资料

  • 🎥 10分钟学会pandas - 快速入门指南

实践平台

  • 📊 Kaggle Learn - 交互式学习平台

  • 💻 DataCamp - 结构化课程

进阶学习

  • 📘《Python for Data Analysis》 - pandas作者亲自撰写

  • 🚀 Real Python教程 - 实践导向教程

🎓 最佳实践建议

  1. 先探索,后处理:使用.info().describe()了解数据全貌

  2. 处理缺失值:根据业务逻辑选择填充或删除

  3. 善用向量化操作:避免使用循环,用pandas内置函数

  4. 保持数据一致性:确保数据类型正确,处理异常值

  5. 文档化处理步骤:记录每个数据处理步骤的目的和结果

✨ 总结

Pandas不仅是一个工具,更是一种数据处理思维方式。通过本文的学习,你已经掌握了:

✅ 数据读取与保存的多种方式
✅ 数据探索与清洗的核心技巧
✅ 数据筛选与转换的灵活方法
✅ 分组聚合与统计分析的能力
✅ 数据可视化的基础技能

实践是最好的老师。找一个真实的数据集,从数据清洗到分析可视化完整走一遍流程,你会对pandas有更深刻的理解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 23:29:06

《数字化破局抖音电商:从爆品打造到闭环运营实战》 第二章 第二节

前言 第一部分 盈利思维与运营基础 第1章 抖音电商盈利思维 1.1 盈亏平衡点分析:C一年半实战复盘 1.2 抖音电商的四种盈利模式及适用场景 1.3 IT思维做运营:数据驱动、系统思考、敏捷迭代 1.4 构建运营的“安全区”与“加速器”:与平台共生 第2章 抖音电商全景认知 …

作者头像 李华
网站建设 2026/4/3 4:01:47

Thorium浏览器完整指南:从入门到精通的性能优化技巧

Thorium浏览器完整指南:从入门到精通的性能优化技巧 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of the README.…

作者头像 李华
网站建设 2026/3/30 13:02:13

有限元方法入门宝典 - 何晓明教授的全套学习资源解析

有限元方法入门宝典 - 何晓明教授的全套学习资源解析 【免费下载链接】有限元基础课程资源-何晓明 本仓库提供了一个关于有限元基础课程的资源文件下载,课程由何晓明讲授。资源文件包括上课课件、九次作业的MATLAB代码以及课堂答疑内容。这些资源非常适合正在学习这…

作者头像 李华
网站建设 2026/3/31 23:32:54

终极指南:如何在Google Apps Script中实现OAuth2认证

终极指南:如何在Google Apps Script中实现OAuth2认证 【免费下载链接】apps-script-oauth2 An OAuth2 library for Google Apps Script. 项目地址: https://gitcode.com/gh_mirrors/ap/apps-script-oauth2 想要在Google Apps Script中轻松实现OAuth2认证&…

作者头像 李华
网站建设 2026/3/30 23:46:42

创客匠人峰会新视角:AI 时代知识变现的 “组织化转型”—— 从个人 IP 到 “AI+IP” 组织的增长革命

引言:峰会核心洞察 —— 知识变现的竞争已升级为 “组织能力” 的竞争2025 年 11 月 22 日 - 25 日,由创客匠人主办的 “全球创始人 IPAI 万人高峰论坛” 在厦门圆满落幕。这场汇聚近万名创业者、投资人及行业领袖的盛会,以 “AI 重构生产力&…

作者头像 李华