44·模块十:数据处理与分析进阶

数据分析:pandas 入门与 DataFrame

pandasdata-analysisdataframe

第 44 课:数据分析 - pandas 入门与 DataFrame

学习目标

完成本课学习后,你将能够:

  1. 理解 pandas 库在数据分析中的核心地位及 DataFrame 的基本概念。
  2. 熟练使用 Python 创建和初始化一个 DataFrame 对象。
  3. 掌握查看 DataFrame 基本信息(如形状、数据类型、统计摘要)的方法。
  4. 运用多种方式(如列名、切片、条件)选择和筛选 DataFrame 中的数据。
  5. DataFrame 中的单列数据进行基本的数学与统计计算。

核心概念

1. pandas 是什么? 想象一下,你有一张精心整理的 Excel 表格,里面有各种行列数据。pandas 就是 Python 中一个强大、高效的"超级 Excel"工具库。它专门用于处理结构化(表格型)或异构数据。你可以用它轻松地进行数据的读取、清洗、转换、分析和可视化。

2. DataFrame 是什么? DataFramepandas 最核心的数据结构,你可以把它理解为一个带行标签和列标签的二维表格,就像 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 的学生的姓名和分数。

常见错误

  1. 忘记导入库: 使用 import pandas as pd 是第一步,否则 pdDataFrame 都无法识别。
  2. 用错误的方式选择多列: 选择多列时,需要使用双层方括号 [[]],例如 df[['姓名', '年龄']]。如果用 df['姓名', '年龄'] 会报错。
  3. 混淆 loc 和 iloc
    • loc 是基于标签(列名、行索引名)进行索引。
    • iloc 是基于整数位置(0, 1, 2...)进行索引。初学者应先掌握 loc
  4. 链式赋值: 当尝试通过筛选后的视图修改数据时(如 df[df['成绩']>90]['等级'] = 'A'),可能会遇到 SettingWithCopyWarning 警告。更安全的方式是使用 .loc 一次性完成筛选和赋值。
  5. 忽略数据类型: 某些操作(如 .mean())只对数值列有效。对字符串列使用会报错。务必先用 .dtypes 查看列类型。

小结

  • pandas 是基石pandas 是 Python 数据分析的基石,而 DataFrame 是其核心武器。
  • 创建 DataFrame: 最常用的方式是从字典创建,字典的键是列名,值是列数据列表。
  • 探索数据: 养成使用 .shape, .head(), .dtypes, .describe() 等方法快速了解数据全貌的习惯。
  • 访问数据: 通过列名访问单列(得到 Series)或多列(得到 DataFrame),通过布尔条件进行筛选,使用 .loc 进行更精细的行/列标签选择。
  • 简单计算: 对单个 Series(如 df['列名'])可以直接调用 .mean(), .max(), .sum() 等方法进行聚合计算。

熟练掌握本课内容,你将为后续更复杂的数据清洗、转换和聚合操作打下坚实的基础。多动手练习,尝试用不同的方式访问和操作数据!

练习编辑器

python
Loading...

继续学习

完成本课后,建议继续学习下一课「pandas 数据清洗与操作」 以巩固所学知识。