100个Pandas练习题:从入门到精通的实战指南

100个Pandas练习题:从入门到精通的实战指南

100-pandas-puzzles 100 data puzzles for pandas, ranging from short and simple to super tricky (60% complete) 项目地址: https://gitcode.com/gh_mirrors/10/100-pandas-puzzles

前言

Pandas作为Python数据分析的核心库,掌握其基本操作是每位数据分析师的必备技能。本文将基于经典的100个Pandas练习题项目,带领读者从基础到进阶系统性地学习Pandas的各种操作技巧。

环境准备

在开始练习前,我们需要确保正确导入Pandas并检查环境配置:

import pandas as pd
import numpy as np  # 后续练习会用到NumPy

# 检查Pandas版本
print(pd.__version__)

# 查看Pandas依赖库的版本信息
print(pd.show_versions())

基础DataFrame操作

创建DataFrame

首先我们创建一个包含动物信息的DataFrame:

data = {
    'animal': ['猫', '猫', '蛇', '狗', '狗', '猫', '蛇', '猫', '狗', '狗'],
    'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
    'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
    'priority': ['是', '是', '否', '是', '否', '否', '否', '是', '否', '否']
}

labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

df = pd.DataFrame(data, index=labels)

基础查询操作

  1. 查看DataFrame基本信息
df.info()  # 显示数据类型、非空值数量等
df.describe()  # 数值列的统计摘要
  1. 数据选择
# 选择前3行
df.head(3)

# 选择特定列
df[['animal', 'age']]

# 同时选择特定行和列
df.loc[['d', 'e', 'i'], ['animal', 'age']]
  1. 条件筛选
# 访问次数大于3的记录
df[df['visits'] > 3]

# 年龄为空的记录
df[df['age'].isna()]

# 复合条件查询(猫且年龄小于3岁)
df[(df['animal'] == '猫') & (df['age'] < 3)]

数据修改与计算

  1. 修改数据
# 修改特定值
df.loc['f', 'age'] = 1.5

# 替换列中的值
df['animal'] = df['animal'].replace('蛇', '蟒蛇')

# 转换列数据类型
df['priority'] = df['priority'].map({'是': True, '否': False})
  1. 数据统计
# 计算总访问次数
df['visits'].sum()

# 按动物类型计算平均年龄
df.groupby('animal')['age'].mean()

# 计算每种动物的数量
df['animal'].value_counts()
  1. 排序操作
# 多列排序
df.sort_values(by=['age', 'visits'], ascending=[False, True])

进阶DataFrame操作

数据透视与分组

  1. 创建透视表
# 计算每种动物在不同访问次数下的平均年龄
pd.pivot_table(df, values='age', index='animal', columns='visits', aggfunc='mean')
  1. 复杂分组计算
# 对每个组计算前三大的值的和
df.groupby('grps')['vals'].nlargest(3).sum(level=0)

特殊数据处理技巧

  1. 过滤连续重复值
df[df['A'].shift() != df['A']]
  1. 行标准化
df.sub(df.mean(axis=1), axis=0)
  1. 处理缺失值
# 找出每行第三个NaN所在的列
df.isna().cumsum(axis=1).eq(3).idxmax(axis=1)

高级应用场景

自定义计算

  1. 计算与最近零值的距离
# 创建一个新列Y,计算每个值与前面最近零值的距离
x = (df['X'] != 0).cumsum()
y = x != x.shift()
df['Y'] = y.groupby((y != y.shift()).cumsum()).cumsum()
  1. 找出最大值位置
# 找出DataFrame中最大的3个值的行列索引
df.unstack().sort_values(ascending=False).index[:3].tolist()
  1. 区间分组统计
# 按A列的区间分组计算B列的和
df.groupby(pd.cut(df['A'], np.arange(0, 101, 10))['B'].sum()

总结

通过这100个Pandas练习题,我们系统性地学习了:

  1. DataFrame的创建和基本操作
  2. 数据查询、筛选和排序技巧
  3. 数据修改和计算方法
  4. 分组聚合和透视表应用
  5. 各种高级数据处理技巧

建议读者在实际操作中逐步完成这些练习,遇到问题时查阅Pandas官方文档,深入理解每个操作背后的原理。掌握这些技能后,你将能够高效地处理各种数据分析任务。

100-pandas-puzzles 100 data puzzles for pandas, ranging from short and simple to super tricky (60% complete) 项目地址: https://gitcode.com/gh_mirrors/10/100-pandas-puzzles

你可能感兴趣的:(100个Pandas练习题:从入门到精通的实战指南)