Pandas 基础操作
Pandas 基础操作
📋 概述
Pandas是Python中最重要的数据分析库之一,提供了高性能、易用的数据结构和数据分析工具。本文档详细介绍Pandas的基础操作,包括Series和DataFrame的创建、索引、切片、数据对齐、排序排名等核心功能。
🎯 学习目标
通过本文档的学习,您将能够:
- 掌握Series和DataFrame的创建和基本操作
- 理解Pandas的索引机制和数据对齐原理
- 熟练使用各种数据选择和过滤方法
- 掌握数据排序、排名和统计分析功能
- 了解唯一值处理和成员属性检查
📚 前置知识
- Python基础语法
- NumPy基础操作
- 基本的数据结构概念
📖 详细内容
基本概念
Series - 一维数据结构
Series是带有标签的一维数组,可以保存任何数据类型。
import pandas as pd
import numpy as np
# 创建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
# 带索引的Series
s_indexed = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s_indexed)
# 从字典创建Series
dict_data = {'a': 1, 'b': 2, 'c': 3}
s_dict = pd.Series(dict_data)
print(s_dict)
DataFrame - 二维数据结构
DataFrame是二维的标签化数据结构,类似于电子表格或SQL表。
# 创建DataFrame
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 35],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
print(df)
# 指定索引
df_indexed = pd.DataFrame(data, index=['员工1', '员工2', '员工3'])
print(df_indexed)
数据索引和选择
基本索引操作
# 创建示例DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 10, 11, 12]
}, index=['row1', 'row2', 'row3', 'row4'])
# 选择列
print(df['A']) # 选择单列
print(df[['A', 'C']]) # 选择多列
# 选择行
print(df[1:3]) # 切片选择行
print(df.iloc[0]) # 按位置选择行
print(df.loc['row1']) # 按标签选择行
高级索引方法
loc - 基于标签的索引
# loc方法 - 基于标签
print(df.loc['row1', 'A']) # 选择特定位置
print(df.loc['row1':'row3', 'A':'C']) # 切片选择
print(df.loc[['row1', 'row3'], ['A', 'C']]) # 列表选择
iloc - 基于位置的索引
# iloc方法 - 基于位置
print(df.iloc[0, 1]) # 选择特定位置
print(df.iloc[0:2, 1:3]) # 切片选择
print(df.iloc[[0, 2], [0, 2]]) # 列表选择
at和iat - 快速标量访问
# 快速访问单个值
print(df.at['row1', 'A']) # 基于标签
print(df.iat[0, 0]) # 基于位置
布尔索引
# 布尔索引
df_sample = pd.DataFrame({
'score': [85, 92, 78, 96, 88],
'grade': ['B', 'A', 'C', 'A', 'B']
})
# 条件筛选
high_scores = df_sample[df_sample['score'] > 90]
print(high_scores)
# 多条件筛选
a_grade_high = df_sample[(df_sample['grade'] == 'A') & (df_sample['score'] > 90)]
print(a_grade_high)
数据对齐和算术运算
自动数据对齐
# 创建两个DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': [10, 20],
'C': [30, 40]
}, index=[1, 2])
# 算术运算会自动对齐
result = df1 + df2
print(result)
# 使用fill_value处理缺失值
result_filled = df1.add(df2, fill_value=0)
print(result_filled)
算术方法
# 各种算术方法
df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'])
# 减法操作
result = df.sub(df.iloc[0], axis=1) # 每行减去第一行
print(result)
# 应用函数
range_func = lambda x: x.max() - x.min()
print(df.apply(range_func)) # 对每列应用函数
print(df.apply(range_func, axis=1)) # 对每行应用函数
排序和排名
排序操作
# 创建示例数据
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'score': [85, 92, 78, 96],
'age': [25, 30, 22, 28]
})
# 按值排序
sorted_by_score = df.sort_values('score', ascending=False)
print(sorted_by_score)
# 多列排序
sorted_multi = df.sort_values(['age', 'score'])
print(sorted_multi)
# 按索引排序
sorted_by_index = df.sort_index()
print(sorted_by_index)
排名操作
# Series排名
scores = pd.Series([85, 92, 78, 96, 85])
print(scores.rank()) # 默认平均排名
print(scores.rank(method='min')) # 最小排名
print(scores.rank(method='dense')) # 密集排名
# DataFrame排名
print(df.rank()) # 对所有列排名
print(df.rank(axis=1)) # 对每行排名
描述性统计
基本统计信息
# 创建示例数据
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [10, 20, np.nan, 40, 50],
'C': [100, 200, 300, 400, 500]
})
# 基本统计
print(df.describe()) # 描述性统计
print(df.sum()) # 求和
print(df.mean()) # 平均值
print(df.std()) # 标准差
print(df.count()) # 非空值计数
相关性和协方差
# 相关性分析
print(df.corr()) # 相关性矩阵
print(df.cov()) # 协方差矩阵
# 单独计算相关性
print(df['A'].corr(df['C'])) # 两列之间的相关性
唯一值和成员检查
唯一值操作
# 创建示例Series
s = pd.Series([1, 2, 2, 3, 3, 3, 4])
# 唯一值
print(s.unique()) # 获取唯一值
print(s.value_counts()) # 值计数
print(s.nunique()) # 唯一值数量
成员检查
# 成员检查
print(s.isin([2, 3])) # 检查是否包含指定值
filtered = s[s.isin([2, 3])] # 筛选包含指定值的元素
print(filtered)
💡 实际应用
基础用法示例
# 学生成绩管理系统
students = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'数学': [85, 92, 78, 96],
'英语': [88, 85, 92, 89],
'物理': [90, 88, 85, 94]
})
# 计算总分和平均分
students['总分'] = students[['数学', '英语', '物理']].sum(axis=1)
students['平均分'] = students[['数学', '英语', '物理']].mean(axis=1)
# 按总分排序
students_sorted = students.sort_values('总分', ascending=False)
print(students_sorted)
# 筛选优秀学生(平均分>90)
excellent_students = students[students['平均分'] > 90]
print(excellent_students)
高级用法示例
# 销售数据分析
sales_data = pd.DataFrame({
'产品': ['A', 'B', 'C', 'A', 'B', 'C'],
'季度': ['Q1', 'Q1', 'Q1', 'Q2', 'Q2', 'Q2'],
'销量': [100, 150, 120, 110, 160, 130],
'单价': [10, 15, 12, 11, 16, 13]
})
# 计算销售额
sales_data['销售额'] = sales_data['销量'] * sales_data['单价']
# 透视表分析
pivot_table = sales_data.pivot_table(
values='销售额',
index='产品',
columns='季度',
aggfunc='sum'
)
print(pivot_table)
# 计算增长率
pivot_table['增长率'] = (pivot_table['Q2'] - pivot_table['Q1']) / pivot_table['Q1'] * 100
print(pivot_table)
⚠️ 注意事项
- 索引对齐:Pandas会自动对齐索引,不匹配的位置会产生NaN值
- 数据类型:注意数据类型的一致性,避免意外的类型转换
- 内存使用:大数据集时要注意内存使用,考虑使用分块处理
- 链式操作:避免过长的链式操作,影响代码可读性
- 视图vs副本:理解何时返回视图,何时返回副本
🔗 相关内容
📚 扩展阅读
🏷️ 标签
pandas 数据分析 DataFrame Series 索引 数据处理 统计分析
讨论与反馈
欢迎在下方留言讨论,分享你的学习心得或提出问题。评论基于GitHub Issues,需要GitHub账号。