费曼学习法14 - 数据世界的 “读心术“:Pandas 数据读取与写入 (Pandas 应用篇)

发布于:2025-03-09 ⋅ 阅读:(133) ⋅ 点赞:(0)

Pandas入门系列第三篇:数据世界的 “读心术”:Pandas 数据读取与写入 (Pandas 应用篇)

开篇提问:

你是否遇到过这样的情况:数据分析师给你发来一个 CSV 文件,或者一份 Excel 报表,里面包含了你需要分析的关键数据。 这些数据就像 “沉睡的宝藏”,只有 正确地 “读取” 它们,才能开始挖掘其中的价值。 同样,当你辛辛苦苦用 Pandas 完成数据处理和分析后,如何将 “成果” “写入” 文件,方便保存、分享或进一步使用呢?

Pandas 的数据读取与写入功能,就像是数据世界的 “读心术”,可以让你轻松 “读懂” 各种文件格式的数据,并 “书写” 你的分析结果。 掌握 Pandas 的数据 I/O (Input/Output) 操作,是构建完整数据分析流程的 关键一步。 今天,我们就来学习如何使用 Pandas “读” 取各种数据文件,又如何将处理后的数据 “写” 入文件,让你的数据分析工作更加流畅自如!

核心概念讲解 (费曼式解释):

  1. Pandas 数据读取: “打开数据之门,连接数据世界”

    Pandas 提供了 一系列强大的 read_ 函数,可以从各种不同的数据源 读取数据并创建 DataFrame 对象。 这些数据源包括 文本文件 (CSV, TXT), 电子表格文件 (Excel), JSON 文件, HTML 文件, SQL 数据库 等等。 read_ 函数就像是 “数据世界的门钥匙”,帮你打开通往各种数据的大门。 我们重点学习最常用的 pd.read_csv()pd.read_excel() 函数。

    • pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, dtype=None, encoding=None, parse_dates=False, na_values=None, ...): 读取 CSV 文件

      pd.read_csv() 函数用于 读取 CSV (Comma-Separated Values) 文件,并将其 解析为 DataFrame 对象。 CSV 文件是一种 常用的文本文件格式,用 逗号 (或其他分隔符) 分隔字段,用 换行符 分隔行,结构清晰,易于处理。 pd.read_csv() 提供了 丰富的参数,可以灵活地处理各种 CSV 文件。

      import pandas as pd
      
      # 假设当前目录下有一个名为 'student_grades.csv' 的 CSV 文件,内容如下:
      # Name,Math,English,Science
      # Alice,85,92,88
      # Bob,90,80,95
      # Charlie,78,85,90
      
      # 1. 使用 pd.read_csv() 读取 CSV 文件 (最基本用法,默认参数)
      file_path_csv = 'student_grades.csv' # CSV 文件路径
      df_csv_basic = pd.read_csv(file_path_csv) # 读取 CSV 文件,默认逗号分隔
      print("基本 CSV 文件读取 (pd.read_csv()):\n", df_csv_basic)
      print("\nDataFrame 的数据类型 (df_csv_basic.dtypes):\n", df_csv_basic.dtypes) # Pandas 自动推断数据类型
      
      # 2. 常用参数详解:
      #    filepath_or_buffer:  文件路径 (或文件对象)
      #    sep, delimiter:  字段分隔符 (默认逗号 ',')
      #    header:  指定哪一行作为列名 (默认 'infer' 自动推断,可以是行号列表或 None 表示没有列名)
      #    names:  自定义列名 (列表,当 header=None 时使用)
      #    index_col:  指定哪一列作为行索引 (可以是列索引号或列名,或列表表示多级索引)
      #    dtype:  指定列的数据类型 (字典,例如 {'列名': 数据类型})
      #    encoding:  文件编码 (例如 'utf-8', 'gbk',根据文件实际编码指定)
      #    parse_dates:  指定哪些列解析为日期类型 (列索引列表或列名列表)
      #    na_values:  指定哪些值被识别为缺失值 (例如 ['NA', 'N/A', '?', '-'],列表或字典)
      
      # 3. 使用不同参数读取 CSV 文件示例:
      
      #   a) 指定分隔符为制表符 '\t' (假设 CSV 文件使用制表符分隔)
      df_csv_tab_sep = pd.read_csv(file_path_csv, sep='\t') # 指定分隔符为制表符
      # print("\nCSV 文件读取 (制表符分隔 sep='\t'):\n", df_csv_tab_sep) # 如果文件实际是逗号分隔,指定制表符会解析错误
      
      #   b) 指定第一列 'Name' 作为行索引 (index_col='Name')
      df_csv_index_col = pd.read_csv(file_path_csv, index_col='Name') # 指定 'Name' 列作为行索引
      print("\nCSV 文件读取 (指定 'Name' 列为行索引 index_col='Name'):\n", df_csv_index_col)
      print("\nDataFrame 的行索引 (df_csv_index_col.index):\n", df_csv_index_col.index) # 'Name' 列变为 DataFrame 的行索引
      
      #   c) 自定义列名 (header=0, names=['姓名', '数学', '英语', '科学']),并指定编码为 'utf-8' (encoding='utf-8')
      df_csv_custom_header = pd.read_csv(file_path_csv, header=0, names=['姓名', '数学', '英语', '科学'], encoding='utf-8') # 自定义列名,指定编码
      print("\nCSV 文件读取 (自定义列名 header=0, names=..., encoding='utf-8'):\n", df_csv_custom_header)
      print("\nDataFrame 的列索引 (df_csv_custom_header.columns):\n", df_csv_custom_header.columns) # 列名变为自定义的 ['姓名', '数学', '英语', '科学']
      
      #   d) 指定 'Math' 和 'English' 列的数据类型为 float32 (dtype={'Math': np.float32, 'English': np.float32})
      import numpy as np
      df_csv_dtype = pd.read_csv(file_path_csv, dtype={'Math': np.float32, 'English': np.float32}) # 指定 'Math' 和 'English' 列的数据类型
      print("\nCSV 文件读取 (指定列数据类型 dtype={}):\n", df_csv_dtype)
      print("\nDataFrame 的数据类型 (df_csv_dtype.dtypes):\n", df_csv_dtype.dtypes) # 'Math' 和 'English' 列的数据类型变为 float32
      
      #   e) 将 'Date' 列解析为日期类型 (parse_dates=['Date'])  (假设 CSV 文件包含 'Date' 列)
      #     (这里示例 CSV 文件没有 'Date' 列,所以 parse_dates 参数不生效,实际应用中需要根据 CSV 文件内容调整)
      # df_csv_parse_dates = pd.read_csv(file_path_csv, parse_dates=['Date']) # 指定 'Date' 列解析为日期类型
      # print("\nCSV 文件读取 (解析日期 parse_dates=['Date']):\n", df_csv_parse_dates) # 示例 CSV 文件没有 'Date' 列,这里会警告
      # if 'Date' in df_csv_parse_dates.columns: # 检查 'Date' 列是否存在
      #     print("\nDataFrame 的数据类型 (df_csv_parse_dates.dtypes):\n", df_csv_parse_dates.dtypes) # 'Date' 列的数据类型应变为 datetime64[ns]
      
      #   f) 将 'NA', 'N/A', '?' 识别为缺失值 (na_values=['NA', 'N/A', '?', '-']) (假设 CSV 文件包含这些缺失值表示)
      df_csv_na_values = pd.read_csv(file_path_csv, na_values=['NA', 'N/A', '?', '-']) # 指定缺失值标识符
      print("\nCSV 文件读取 (指定缺失值标识符 na_values=[]):\n", df_csv_na_values) # 示例 CSV 文件没有这些缺失值,所以效果不明显
      print("\nDataFrame 是否包含缺失值 (df_csv_na_values.isnull().any()):\n", df_csv_na_values.isnull().any()) # 检查 DataFrame 是否包含缺失值
      

      代码解释:

      • pd.read_csv(filepath_or_buffer, sep=',', ...): pd.read_csv() 函数的常用参数,代码注释中已详细解释。 关键参数包括 filepath_or_buffer (文件路径), sep (分隔符), header (列名行), names (自定义列名), index_col (行索引列), dtype (数据类型), encoding (文件编码), parse_dates (日期解析列), na_values (缺失值标识符) 等。 根据实际 CSV 文件的情况,灵活调整这些参数,才能正确读取数据。
    • pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, dtype=None, parse_dates=False, na_values=None, ...): 读取 Excel 文件

      pd.read_excel() 函数用于 读取 Excel 文件 (.xls, .xlsx),并将其 解析为 DataFrame 对象。 Excel 文件是一种 常用的电子表格文件格式,可以包含 多个工作表 (sheets),数据组织更加灵活。 pd.read_excel() 也提供了 丰富的参数,可以灵活地处理各种 Excel 文件。

      import pandas as pd
      
      # 假设当前目录下有一个名为 'sales_data.xlsx' 的 Excel 文件,包含一个名为 'Sheet1' 的工作表,内容如下:
      # Product	Category	Sales
      # Apple	Fruit	100
      # Banana	Fruit	150
      # Orange	Fruit	120
      # Computer	Electronics	1000
      # Phone	Electronics	800
      
      # 1. 使用 pd.read_excel() 读取 Excel 文件 (最基本用法,默认读取第一个工作表)
      file_path_excel = 'sales_data.xlsx' # Excel 文件路径
      df_excel_basic = pd.read_excel(file_path_excel) # 读取 Excel 文件,默认读取第一个工作表 (Sheet1 或索引 0)
      print("基本 Excel 文件读取 (pd.read_excel()):\n", df_excel_basic)
      
      # 2. 常用参数详解:
      #    io:  文件路径 (或文件对象)
      #    sheet_name:  指定要读取的工作表 (可以是 工作表名称字符串、工作表索引号、工作表名称列表或索引号列表,默认为 0 表示第一个工作表)
      #    header:  指定哪一行作为列名 (默认 0 第一行,与 pd.read_csv() 类似)
      #    names:  自定义列名 (列表,当 header=None 时使用,与 pd.read_csv() 类似)
      #    index_col:  指定哪一列作为行索引 (与 pd.read_csv() 类似)
      #    dtype:  指定列的数据类型 (与 pd.read_csv() 类似)
      #    parse_dates:  指定哪些列解析为日期类型 (与 pd.read_csv() 类似)
      #    na_values:  指定哪些值被识别为缺失值 (与 pd.read_csv() 类似)
      
      # 3. 使用不同参数读取 Excel 文件示例:
      
      #   a) 指定读取第二个工作表 (sheet_name=1 或 sheet_name='Sheet2',假设 Excel 文件有多个工作表)
      df_excel_sheet2 = pd.read_excel(file_path_excel, sheet_name=1) # 读取第二个工作表 (索引 1)
      # df_excel_sheet_name = pd.read_excel(file_path_excel, sheet_name='Sheet2') # 或者指定工作表名称
      # print("\nExcel 文件读取 (指定工作表 sheet_name=1):\n", df_excel_sheet2) # 示例 Excel 文件只有一个工作表,读取第二个工作表可能为空
      
      #   b) 指定 'Product' 列作为行索引 (index_col='Product')
      df_excel_index_col = pd.read_excel(file_path_excel, index_col='Product') # 指定 'Product' 列作为行索引
      print("\nExcel 文件读取 (指定 'Product' 列为行索引 index_col='Product'):\n", df_excel_index_col)
      print("\nDataFrame 的行索引 (df_excel_index_col.index):\n", df_excel_index_col.index) # 'Product' 列变为 DataFrame 的行索引
      
      #   c) 自定义列名 (header=0, names=['产品', '类别', '销量'])
      df_excel_custom_header = pd.read_excel(file_path_excel, header=0, names=['产品', '类别', '销量']) # 自定义列名
      print("\nExcel 文件读取 (自定义列名 header=0, names=...):\n", df_excel_custom_header)
      print("\nDataFrame 的列索引 (df_excel_custom_header.columns):\n", df_excel_custom_header.columns) # 列名变为自定义的 ['产品', '类别', '销量']
      
      #   d) 指定 'Sales' 列的数据类型为 int32 (dtype={'Sales': np.int32})
      df_excel_dtype = pd.read_excel(file_path_excel, dtype={'Sales': np.int32}) # 指定 'Sales' 列的数据类型
      print("\nExcel 文件读取 (指定列数据类型 dtype={}):\n", df_excel_dtype)
      print("\nDataFrame 的数据类型 (df_excel_dtype.dtypes):\n", df_excel_dtype.dtypes) # 'Sales' 列的数据类型变为 int32
      

      代码解释:

      • pd.read_excel(io, sheet_name=0, ...): pd.read_excel() 函数的常用参数,代码注释中已详细解释。 关键参数包括 io (文件路径), sheet_name (工作表), header (列名行), names (自定义列名), index_col (行索引列), dtype (数据类型), parse_dates (日期解析列), na_values (缺失值标识符) 等。 sheet_name 参数用于指定要读取的工作表,非常重要,Excel 文件通常包含多个工作表。
    • 其他 pd.read_ 函数: 扩展你的数据源

      除了 pd.read_csv()pd.read_excel(),Pandas 还提供了其他 pd.read_ 函数,可以读取更多类型的数据源,例如:

      • pd.read_json(path_or_buf, ...): 读取 JSON 文件 (用于读取 JSON 格式的数据)
      • pd.read_html(io, ...): 读取 HTML 文件 (用于读取 HTML 表格数据,例如网页上的表格)
      • pd.read_sql(sql, con, ...): 读取 SQL 数据库 (用于从 SQL 数据库查询数据并创建 DataFrame)
      • pd.read_clipboard(sep='\s+', **kwargs): 读取剪贴板数据 (用于直接读取剪贴板中的表格数据)
      • pd.read_pickle(filepath_or_buffer, ...): 读取 Pickle 文件 (用于读取 Python Pickle 序列化格式的数据)
      • pd.read_fwf(filepath_or_buffer, widths=None, ...): 读取固定宽度格式文件 (用于读取固定宽度字段的文本文件)
      • … (更多 pd.read_ 函数请查阅 Pandas 文档)

      掌握这些 pd.read_ 函数,你就可以连接到各种不同的数据源,将数据导入 Pandas 进行分析,真正打开数据世界的大门!

  2. Pandas 数据写入: “保存分析成果,分享数据价值”

    与数据读取相对应,Pandas 也提供了 一系列 .to_ 方法,可以将 DataFrame 对象 写入到不同格式的文件 中。 常用的 DataFrame 写入方法包括:

    • .to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, encoding=None, ...): 写入 CSV 文件

      DataFrame 的 .to_csv() 方法可以将 DataFrame 写入到 CSV 文件.to_csv() 提供了丰富的参数,可以控制 CSV 文件的 分隔符、编码、是否包含列名和索引 等。

      import pandas as pd
      
      # 假设我们有一个 DataFrame (例如之前读取的 df_csv_basic)
      # df_csv_basic = pd.read_csv('student_grades.csv') # 重新读取示例 CSV 文件
      
      # 1. 将 DataFrame 写入 CSV 文件 (最基本用法,默认参数)
      output_file_path_csv = 'student_grades_output.csv' # 输出 CSV 文件路径
      df_csv_basic.to_csv(output_file_path_csv) # 将 DataFrame 写入 CSV 文件 (默认逗号分隔,包含 header 和 index)
      print(f"DataFrame 已写入 CSV 文件 (默认格式): {output_file_path_csv}")
      # 你可以用文本编辑器打开 student_grades_output.csv 文件,查看 CSV 数据
      
      # 2. 常用参数详解:
      #    path_or_buf:  文件路径 (或文件对象),指定输出文件路径
      #    sep:  字段分隔符 (默认逗号 ',')
      #    na_rep:  缺失值表示字符串 (默认 '')
      #    float_format:  浮点数格式字符串 (例如 '%.2f' 保留 2 位小数)
      #    columns:  指定要写入的列 (列名列表,默认为 None 表示所有列)
      #    header:  是否写入列名 (布尔值或列名列表,默认 True 写入列名)
      #    index:  是否写入行索引 (布尔值,默认 True 写入行索引)
      #    index_label:  行索引列的列名 (字符串或列名列表,当 index=True 且行索引有名称时使用)
      #    encoding:  文件编码 (例如 'utf-8', 'gbk',与 pd.read_csv() 的 encoding 参数类似)
      
      # 3. 使用不同参数写入 CSV 文件示例:
      
      #   a) 指定分隔符为制表符 '\t' (sep='\t'),不包含行索引 (index=False)
      output_file_path_tsv = 'student_grades_output.tsv' # 输出 TSV 文件路径
      df_csv_basic.to_csv(output_file_path_tsv, sep='\t', index=False) # 写入 TSV 文件,制表符分隔,不包含行索引
      print(f"\nDataFrame 已写入 TSV 文件 (制表符分隔, 无索引): {output_file_path_tsv}")
      
      #   b) 指定缺失值表示为 'NaN' (na_rep='NaN'),浮点数格式保留 2 位小数 (float_format='%.2f'),并指定编码为 'utf-8-sig' (encoding='utf-8-sig') (带 BOM 的 UTF-8 编码,Excel 兼容性更好)
      output_file_path_csv_formatted = 'student_grades_formatted.csv' # 输出格式化 CSV 文件路径
      df_csv_basic.to_csv(output_file_path_csv_formatted, na_rep='NaN', float_format='%.2f', encoding='utf-8-sig') # 写入格式化 CSV 文件,指定缺失值表示,浮点数格式,编码
      print(f"\nDataFrame 已写入格式化 CSV 文件 (缺失值 NaN, 2 位小数, utf-8-sig 编码): {output_file_path_csv_formatted}")
      
      #   c) 只写入 'Name' 和 'Math' 两列 (columns=['Name', 'Math']),并自定义 header (header=['学生姓名', '数学成绩'])
      output_file_path_csv_subset = 'student_grades_subset.csv' # 输出部分列 CSV 文件路径
      df_csv_basic.to_csv(output_file_path_csv_subset, columns=['Name', 'Math'], header=['学生姓名', '数学成绩'], index=False) # 只写入指定列,自定义 header,不包含索引
      print(f"\nDataFrame 已写入部分列 CSV 文件 (指定列, 自定义 header, 无索引): {output_file_path_csv_subset}")
      

      代码解释:

      • .to_csv(path_or_buf=None, sep=',', ...): DataFrame 的 .to_csv() 方法的常用参数,代码注释中已详细解释。 关键参数包括 path_or_buf (输出文件路径), sep (分隔符), na_rep (缺失值表示), float_format (浮点数格式), columns (要写入的列), header (是否写入 header), index (是否写入 index), encoding (文件编码) 等。 根据实际需求,灵活调整这些参数,可以输出各种格式的 CSV 文件。
    • .to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, encoding=None, ...): 写入 Excel 文件

      DataFrame 的 .to_excel() 方法可以将 DataFrame 写入到 Excel 文件 (.xlsx).to_excel() 也提供了丰富的参数,可以控制 Excel 文件的 工作表名称、是否包含列名和索引 等。 需要安装 openpyxlxlsxwriter 库才能使用 .to_excel() 方法。 可以使用 pip install openpyxlpip install xlsxwriter 安装。

      import pandas as pd
      
      # 假设我们有一个 DataFrame (例如之前读取的 df_csv_basic)
      # df_csv_basic = pd.read_csv('student_grades.csv') # 重新读取示例 CSV 文件
      
      # 1. 将 DataFrame 写入 Excel 文件 (最基本用法,默认参数,写入到 Sheet1)
      output_file_path_excel = 'student_grades_output.xlsx' # 输出 Excel 文件路径
      df_csv_basic.to_excel(output_file_path_excel) # 将 DataFrame 写入 Excel 文件 (默认写入到 Sheet1,包含 header 和 index)
      print(f"DataFrame 已写入 Excel 文件 (默认格式): {output_file_path_excel}")
      # 你可以用 Excel 软件打开 student_grades_output.xlsx 文件,查看 Excel 数据
      
      # 2. 常用参数详解:
      #    excel_writer:  文件路径 (或 ExcelWriter 对象),指定输出 Excel 文件路径
      #    sheet_name:  工作表名称 (默认 'Sheet1')
      #    na_rep:  缺失值表示字符串 (默认 '')
      #    float_format:  浮点数格式字符串 (与 .to_csv() 类似)
      #    columns:  指定要写入的列 (与 .to_csv() 类似)
      #    header:  是否写入列名 (与 .to_csv() 类似)
      #    index:  是否写入行索引 (与 .to_csv() 类似)
      #    index_label:  行索引列的列名 (与 .to_csv() 类似)
      #    encoding:  文件编码 (不常用,Excel 文件编码通常由 Excel 软件自动处理)
      
      # 3. 使用不同参数写入 Excel 文件示例:
      
      #   a) 指定写入到名为 'GradesSheet' 的工作表 (sheet_name='GradesSheet'),不包含行索引 (index=False)
      output_file_path_excel_sheet = 'student_grades_sheet.xlsx' # 输出指定工作表 Excel 文件路径
      df_csv_basic.to_excel(output_file_path_excel_sheet, sheet_name='GradesSheet', index=False) # 写入到指定工作表,不包含行索引
      print(f"\nDataFrame 已写入 Excel 文件 (指定工作表 'GradesSheet', 无索引): {output_file_path_excel_sheet}")
      
      #   b) 只写入 'Name' 和 'English' 两列 (columns=['Name', 'English']),并自定义 header (header=['学生姓名', '英语成绩'])
      output_file_path_excel_subset = 'student_grades_subset.xlsx' # 输出部分列 Excel 文件路径
      df_csv_basic.to_excel(output_file_path_excel_subset, columns=['Name', 'English'], header=['学生姓名', '英语成绩'], index=False, sheet_name='EnglishGrades') # 只写入指定列,自定义 header,不包含索引,指定工作表名
      print(f"\nDataFrame 已写入部分列 Excel 文件 (指定列, 自定义 header, 无索引, 指定工作表): {output_file_path_excel_subset}")
      

      代码解释:

      • .to_excel(excel_writer, sheet_name='Sheet1', ...): DataFrame 的 .to_excel() 方法的常用参数,代码注释中已详细解释。 关键参数包括 excel_writer (输出文件路径), sheet_name (工作表名称), na_rep (缺失值表示), float_format (浮点数格式), columns (要写入的列), header (是否写入 header), index (是否写入 index) 等。 sheet_name 参数用于指定要写入的工作表名称,可以方便地将多个 DataFrame 写入到同一个 Excel 文件的不同工作表中。
    • 其他 .to_ 方法: 导出到更多格式

      Pandas 还提供了其他 .to_ 方法,可以将 DataFrame 导出到更多格式的文件,例如:

      • .to_json(path_or_buf=None, ...): 写入 JSON 文件 (将 DataFrame 写入 JSON 格式文件)
      • .to_html(buf=None, ...): 写入 HTML 文件 (将 DataFrame 写入 HTML 表格,方便在网页中显示)
      • .to_sql(name, con, ...): 写入 SQL 数据库 (将 DataFrame 写入 SQL 数据库表)
      • .to_pickle(path, ...): 写入 Pickle 文件 (将 DataFrame 序列化为 Python Pickle 格式)
      • .to_markdown(buf=None, ...): 写入 Markdown 文件 (将 DataFrame 写入 Markdown 表格,方便在 Markdown 文档中显示)
      • … (更多 .to_ 方法请查阅 Pandas 文档)

      掌握这些 .to_ 方法,你就可以将 Pandas 处理后的数据导出到各种不同的格式,方便数据保存、分享和与其他系统集成,真正实现数据的 “自由流通”!

  3. 案例应用: 读取 CSV 数据,进行简单处理,保存结果到 Excel

    我们来做一个简单的 案例应用,演示 完整的数据读取、处理、写入流程。 假设我们有一个 CSV 格式的学生成绩单文件 student_grades.csv,我们需要 读取该文件,计算每个学生的平均分,并将包含平均分的新 DataFrame 保存到 Excel 文件

        import pandas as pd
    
        # 1. 读取 CSV 文件 (student_grades.csv)
        file_path_csv = 'student_grades.csv'
        student_df = pd.read_csv(file_path_csv, index_col='Name') # 读取 CSV 文件,指定 'Name' 列为行索引
        print("原始学生成绩单 (DataFrame):\n", student_df)
    
        # 2. 计算每个学生的平均分 (按行计算平均值,axis=1)
        average_scores = student_df[['Math', 'English', 'Science']].mean(axis=1) # 选择 'Math', 'English', 'Science' 列计算平均值
        print("\n每个学生的平均分 (Series):\n", average_scores)
    
        # 3. 将平均分添加到 DataFrame (作为新列 'Average Score')
        student_df['Average Score'] = average_scores # 添加 'Average Score' 列
        print("\n添加平均分后的学生成绩单 (DataFrame):\n", student_df)
    
        # 4. 保存包含平均分的 DataFrame 到 Excel 文件 (student_grades_with_average.xlsx)
        output_file_path_excel = 'student_grades_with_average.xlsx'
        student_df.to_excel(output_file_path_excel, sheet_name='AverageGrades', index=True) # 写入 Excel 文件,指定工作表名,包含行索引
        print(f"\n包含平均分的学生成绩单已保存到 Excel 文件: {output_file_path_excel}")
    
        # 5. (可选) 从 Excel 文件加载保存的数据,验证是否正确保存
        loaded_df_excel = pd.read_excel(output_file_path_excel, index_col='Name', sheet_name='AverageGrades') # 从 Excel 文件加载数据,指定行索引和工作表名
        print("\n从 Excel 文件加载的数据 (验证):\n", loaded_df_excel)
        # pd.testing.assert_frame_equal(student_df, loaded_df_excel) # 使用 pd.testing.assert_frame_equal() 函数进行 DataFrame 比较,验证数据是否一致
        ```
    
    **代码解释:**
    
    *   **数据读取:**  使用 `pd.read_csv()`  读取 CSV 文件 `student_grades.csv`,并将 'Name' 列设置为行索引。
    *   **数据处理:**  计算每个学生的平均分,并将其添加到 DataFrame 的新列 'Average Score' 中。
    *   **数据写入:**  使用 `.to_excel()`  将包含平均分的 DataFrame  `student_df`  保存到 Excel 文件 `student_grades_with_average.xlsx`,指定工作表名称为 'AverageGrades',并包含行索引。
    *   **(可选) 数据验证:**  从 Excel 文件加载保存的数据,并与原始 DataFrame 进行比较,验证数据是否被正确保存和加载。  可以使用 `pd.testing.assert_frame_equal()` 函数进行 DataFrame 的精确比较。
    
    **这个案例演示了一个典型的数据分析流程:  数据读取 -> 数据处理 -> 数据写入。**  通过 Pandas 的数据 I/O 功能和数据处理能力,我们可以轻松完成从数据导入、数据分析到结果导出的完整工作流程,大大提高数据分析效率。
    
    

费曼回顾 (知识巩固):

现在,请你用自己的话,总结一下今天我们学习的 Pandas 数据读取和写入的知识,包括:

  • Pandas 提供了哪些常用的函数来读取数据文件? pd.read_csv()pd.read_excel() 分别适用于读取哪些文件格式? 它们的常用参数有哪些? 如何根据实际文件情况灵活使用这些参数?
  • Pandas 提供了哪些常用的方法来将 DataFrame 写入文件? .to_csv().to_excel() 分别适用于写入哪些文件格式? 它们的常用参数有哪些?
  • 在数据读取时,如何进行初步的数据清洗? 例如使用 na_values, dtype, parse_dates 等参数?
  • 在案例应用中,我们是如何运用 Pandas 的数据读取、处理、写入功能,完成一个简单的数据分析流程的?

像给你的同事讲解一样,用清晰简洁的语言解释这些概念,并结合学生成绩单处理案例,帮助他们掌握 Pandas 数据 I/O 的核心技能。

课后思考 (拓展延伸):

  1. 尝试修改学生成绩单处理案例的代码,例如:
    • 尝试读取和写入其他格式的文件,例如 JSON 文件 (使用 pd.read_json(), .to_json())? HTML 文件 (使用 pd.read_html(), .to_html())?
    • 尝试处理更大规模的数据文件 (例如,包含数百万行数据的 CSV 或 Excel 文件),看看 Pandas 数据 I/O 的性能如何?
    • 尝试读取和写入 压缩文件 (例如 .csv.gz, .csv.zip, .xlsx),看看 Pandas 是否支持直接读取和写入压缩文件? (提示: Pandas 通常可以自动处理压缩文件,只需要指定正确的文件路径即可)
  2. 思考一下,除了我们今天学习的文件格式,Pandas 还支持读取和写入哪些其他数据源? 例如,SQL 数据库、HDF5 文件、Parquet 文件等等。 在实际数据分析工作中,你可能会遇到哪些不同的数据源?
  3. 尝试查阅 Pandas 官方文档或其他 Pandas 教程,了解更多关于 Pandas 数据 I/O 的高级特性,例如:
    • Chunksize 参数: 在读取大型 CSV 文件时,使用 chunksize 参数可以 分块读取文件避免一次性加载到内存中,提高内存使用效率。
    • ExcelWriter 对象: 使用 pd.ExcelWriter 对象可以将 多个 DataFrame 写入到同一个 Excel 文件的不同工作表,并进行更精细的 Excel 文件格式控制 (例如设置单元格格式、添加图表等)。
    • 与云存储 (例如 AWS S3, Google Cloud Storage) 集成: Pandas 可以直接从云存储读取和写入数据,方便处理云端数据。

恭喜你!完成了 Pandas 费曼学习法的第三篇文章学习! 你已经掌握了 Pandas 数据 I/O 的核心技能,可以开始构建更完整、更高效的数据分析工作流程了! 下一篇文章,我们将深入学习 Pandas 的 数据清洗 技巧,掌握如何处理数据中的 缺失值、重复值、异常值 等常见问题,让你的数据分析更加 “干净” 和 “可靠”! 敬请期待!


网站公告

今日签到

点亮在社区的每一天
去签到