news 2026/4/15 15:20:47

[特殊字符] 熊猫之力:从零开始解锁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/4/14 5:23:27

华为VRP基础及操作

目录 进入和退出系统视图 状态显示信息 配置文件管理 配置静态路由 华为静态路由实验 R1配置 R2配置 配置R1静态路由 配置R2静态路由 查看路由表 查看当前配置 配置电脑IP 测试PC1pingPC2 进入和退出系统视图 从用户视图进入系统视图:system-view 从系…

作者头像 李华
网站建设 2026/4/15 13:12:24

嵌入式代码优化实战:性能与功耗双赢

嵌入式代码优化实战技术文章大纲嵌入式代码优化概述嵌入式系统特点与优化需求优化目标:性能、功耗、内存占用常见优化误区与基本原则代码结构优化减少函数调用层级与内联函数使用循环展开与循环优化策略避免冗余计算与数据依赖内存优化技术静态内存分配与动态内存管…

作者头像 李华
网站建设 2026/4/13 22:09:37

VFXToolbox:视觉特效制作的全流程效率革命

VFXToolbox:视觉特效制作的全流程效率革命 【免费下载链接】VFXToolbox Additional tools for Visual Effect Artists 项目地址: https://gitcode.com/gh_mirrors/vf/VFXToolbox 还在为特效制作中的重复性工作头疼吗?VFXToolbox将彻底改变你的工作…

作者头像 李华
网站建设 2026/4/2 22:40:38

罗德里格斯旋转公式详解

罗德里格斯旋转公式详解 一、历史渊源 罗德里格斯旋转公式以法国数学家奥利安罗德里格斯的名字命名,他在1840年的一篇论文中首次系统地描述了这一公式。然而,这一公式的历史可以追溯到更早的时期: 1775年:莱昂哈德欧拉发现了描述刚…

作者头像 李华