第 44 课:数据分析 - pandas 入门与 DataFrame
学习目标
完成本课学习后,你将能够:
- 理解
pandas库在数据分析中的核心地位及DataFrame的基本概念。 - 熟练使用 Python 创建和初始化一个
DataFrame对象。 - 掌握查看
DataFrame基本信息(如形状、数据类型、统计摘要)的方法。 - 运用多种方式(如列名、切片、条件)选择和筛选
DataFrame中的数据。 - 对
DataFrame中的单列数据进行基本的数学与统计计算。
核心概念
1. pandas 是什么?
想象一下,你有一张精心整理的 Excel 表格,里面有各种行列数据。pandas 就是 Python 中一个强大、高效的"超级 Excel"工具库。它专门用于处理结构化(表格型)或异构数据。你可以用它轻松地进行数据的读取、清洗、转换、分析和可视化。
2. DataFrame 是什么?
DataFrame 是 pandas 最核心的数据结构,你可以把它理解为一个带行标签和列标签的二维表格,就像 Excel 中的一个工作表。
- 列 (Columns): 每一列通常代表一个变量或一个属性(如"姓名"、"年龄"、"成绩")。
- 行 (Rows): 每一行代表一个观测样本或一条记录(如"一个学生的信息")。
- 索引 (Index): 每一行都有一个唯一的标签,称为索引。默认是 0, 1, 2... 的数字,但也可以是日期、ID 等有意义的标签。
代码示例
我们将从一个包含学生信息的字典开始,逐步演示如何创建和使用 DataFrame。
# 第一步:导入 pandas 库,并约定俗成地使用 pd 作为别名
import pandas as pd
# 第二步:准备数据。通常,我们会使用字典来创建 DataFrame。
# 字典的'键'将成为列名,'值'(列表)将成为该列的数据。
student_data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [20, 21, 19, 22],
'成绩': [85, 92, 78, 95],
'城市': ['北京', '上海', '广州', '深圳']
}
# 第三步:使用 pd.DataFrame() 函数创建 DataFrame
df = pd.DataFrame(student_data)
print("创建的DataFrame:")
print(df)
print("\n" + "="*50 + "\n")
# 第四步:探索 DataFrame 的基本信息
print(f"1. DataFrame 的形状(行数,列数):{df.shape}")
print(f"2. DataFrame 的列名:{df.columns.tolist()}")
print(f"3. 各列的数据类型:\n{df.dtypes}")
print("\n" + "="*50 + "\n")
# 第五步:使用 .head() 和 .tail() 查看首尾数据(默认5行)
print("前3行数据 (.head(3)):")
print(df.head(3))
print("\n最后2行数据 (.tail(2)):")
print(df.tail(2))
print("\n" + "="*50 + "\n")
# 第六步:获取数据的快速统计摘要
print("数值列的统计摘要 (.describe()):")
print(df.describe())
print("\n" + "="*50 + "\n")
# 第七步:选择与索引数据
# 选择单列(得到一个 Series)
print("选择'成绩'列 (df['成绩']):")
print(df['成绩'])
# 选择多列(得到一个新的 DataFrame)
print("\n选择'姓名'和'成绩'两列:")
print(df[['姓名', '成绩']])
# 使用条件筛选(布尔索引)
print("\n筛选成绩大于90分的同学:")
print(df[df['成绩'] > 90])
# 使用 loc 按标签选择(选择索引为0和2的行,选择'姓名'和'城市'列)
print("\n使用 loc 选择特定行和列 (loc[0, 2], ['姓名', '城市']):")
print(df.loc[[0, 2], ['姓名', '城市']])
# 第八步:对单列进行计算
print(f"\n所有同学的平均成绩:{df['成绩'].mean():.2f}")
print(f"成绩的最高分:{df['成绩'].max()}")
print(f"成绩的标准差:{df['成绩'].std():.2f}")
实践练习
练习 1:基础创建与查看
根据以下订单数据创建一个 DataFrame,并完成任务。
orders = {
'订单号': ['A001', 'A002', 'A003', 'A004'],
'商品': ['苹果', '香蕉', '橙子', '苹果'],
'数量': [5, 12, 8, 3],
'单价': [8.5, 5.0, 6.2, 8.5]
}
- 任务 1: 创建该
DataFrame并命名为df_orders。 - 任务 2: 打印出
df_orders的形状和列名。 - 任务 3: 打印出前两条订单记录。
练习 2:数据选择与计算
在 df_orders 的基础上:
- 任务 1: 计算并打印每一单的总金额(总金额 = 数量 * 单价)。
- 任务 2: 筛选出所有"苹果"的订单。
- 任务 3: 计算所有订单商品数量的平均值。
练习 3:使用 loc
创建一个学生选课表 df_courses。
course_data = {
'学生ID': [101, 102, 103, 104, 105],
'姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'选课': ['数学', '英语', '数学', '物理', '英语'],
'分数': [88, 75, 92, 81, 89]
}
- 任务: 使用
loc选出学生 ID 为 102 和 104 的学生的姓名和分数。
常见错误
- 忘记导入库: 使用
import pandas as pd是第一步,否则pd和DataFrame都无法识别。 - 用错误的方式选择多列: 选择多列时,需要使用双层方括号
[[]],例如df[['姓名', '年龄']]。如果用df['姓名', '年龄']会报错。 - 混淆 loc 和 iloc:
loc是基于标签(列名、行索引名)进行索引。iloc是基于整数位置(0, 1, 2...)进行索引。初学者应先掌握loc。
- 链式赋值: 当尝试通过筛选后的视图修改数据时(如
df[df['成绩']>90]['等级'] = 'A'),可能会遇到SettingWithCopyWarning警告。更安全的方式是使用.loc一次性完成筛选和赋值。 - 忽略数据类型: 某些操作(如
.mean())只对数值列有效。对字符串列使用会报错。务必先用.dtypes查看列类型。
小结
- pandas 是基石:
pandas是 Python 数据分析的基石,而DataFrame是其核心武器。 - 创建 DataFrame: 最常用的方式是从字典创建,字典的键是列名,值是列数据列表。
- 探索数据: 养成使用
.shape,.head(),.dtypes,.describe()等方法快速了解数据全貌的习惯。 - 访问数据: 通过列名访问单列(得到 Series)或多列(得到 DataFrame),通过布尔条件进行筛选,使用
.loc进行更精细的行/列标签选择。 - 简单计算: 对单个 Series(如
df['列名'])可以直接调用.mean(),.max(),.sum()等方法进行聚合计算。
熟练掌握本课内容,你将为后续更复杂的数据清洗、转换和聚合操作打下坚实的基础。多动手练习,尝试用不同的方式访问和操作数据!
练习编辑器
python
Loading...