Pandas入门系列第三篇:数据世界的 “读心术”:Pandas 数据读取与写入 (Pandas 应用篇)
开篇提问:
你是否遇到过这样的情况:数据分析师给你发来一个 CSV 文件,或者一份 Excel 报表,里面包含了你需要分析的关键数据。 这些数据就像 “沉睡的宝藏”,只有 正确地 “读取” 它们,才能开始挖掘其中的价值。 同样,当你辛辛苦苦用 Pandas 完成数据处理和分析后,如何将 “成果” “写入” 文件,方便保存、分享或进一步使用呢?
Pandas 的数据读取与写入功能,就像是数据世界的 “读心术”,可以让你轻松 “读懂” 各种文件格式的数据,并 “书写” 你的分析结果。 掌握 Pandas 的数据 I/O (Input/Output) 操作,是构建完整数据分析流程的 关键一步。 今天,我们就来学习如何使用 Pandas “读” 取各种数据文件,又如何将处理后的数据 “写” 入文件,让你的数据分析工作更加流畅自如!
核心概念讲解 (费曼式解释):
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 进行分析,真正打开数据世界的大门!
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 文件的 工作表名称、是否包含列名和索引 等。 需要安装openpyxl
或xlsxwriter
库才能使用.to_excel()
方法。 可以使用pip install openpyxl
或pip 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 处理后的数据导出到各种不同的格式,方便数据保存、分享和与其他系统集成,真正实现数据的 “自由流通”!
案例应用: 读取 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 的核心技能。
课后思考 (拓展延伸):
- 尝试修改学生成绩单处理案例的代码,例如:
- 尝试读取和写入其他格式的文件,例如 JSON 文件 (使用
pd.read_json()
,.to_json()
)? HTML 文件 (使用pd.read_html()
,.to_html()
)? - 尝试处理更大规模的数据文件 (例如,包含数百万行数据的 CSV 或 Excel 文件),看看 Pandas 数据 I/O 的性能如何?
- 尝试读取和写入 压缩文件 (例如
.csv.gz
,.csv.zip
,.xlsx
),看看 Pandas 是否支持直接读取和写入压缩文件? (提示: Pandas 通常可以自动处理压缩文件,只需要指定正确的文件路径即可)
- 尝试读取和写入其他格式的文件,例如 JSON 文件 (使用
- 思考一下,除了我们今天学习的文件格式,Pandas 还支持读取和写入哪些其他数据源? 例如,SQL 数据库、HDF5 文件、Parquet 文件等等。 在实际数据分析工作中,你可能会遇到哪些不同的数据源?
- 尝试查阅 Pandas 官方文档或其他 Pandas 教程,了解更多关于 Pandas 数据 I/O 的高级特性,例如:
- Chunksize 参数: 在读取大型 CSV 文件时,使用
chunksize
参数可以 分块读取文件, 避免一次性加载到内存中,提高内存使用效率。 - ExcelWriter 对象: 使用
pd.ExcelWriter
对象可以将 多个 DataFrame 写入到同一个 Excel 文件的不同工作表,并进行更精细的 Excel 文件格式控制 (例如设置单元格格式、添加图表等)。 - 与云存储 (例如 AWS S3, Google Cloud Storage) 集成: Pandas 可以直接从云存储读取和写入数据,方便处理云端数据。
- Chunksize 参数: 在读取大型 CSV 文件时,使用
恭喜你!完成了 Pandas 费曼学习法的第三篇文章学习! 你已经掌握了 Pandas 数据 I/O 的核心技能,可以开始构建更完整、更高效的数据分析工作流程了! 下一篇文章,我们将深入学习 Pandas 的 数据清洗 技巧,掌握如何处理数据中的 缺失值、重复值、异常值 等常见问题,让你的数据分析更加 “干净” 和 “可靠”! 敬请期待!