零基础上手Python数据分析 (9):DataFrame 数据读取与写入 - 让数据自由穿梭

回顾一下,上篇博客我们学习了 Pandas 的核心数据结构 Series 和 DataFrame。 DataFrame 作为 Pandas 的 “王牌” 数据结构,是进行数据分析的基石。 但 DataFrame 的强大功能,还需要建立在 数据输入 (Input)数据输出 (Output) 的基础上。 数据从哪里来? 分析结果又如何保存? 数据读取与写入 (Data I/O) 就是解决这些问题的关键环节。

数据 I/O 的重要性:连接数据与分析

在实际数据分析工作中,数据通常存储在各种 外部数据源 中,例如:

  • CSV 文件 (Comma Separated Values): 最常用的表格数据存储格式之一,以纯文本存储,易于创建和共享。
  • Excel 文件 (.xlsx, .xls): 电子表格软件 Excel 的文件格式,广泛应用于办公场景,包含工作表、公式、格式等。
  • 文本文件 (.txt): 存储纯文本数据,例如日志文件、配置文件等。
  • JSON 文件 (JavaScript Object Notation): 轻量级的数据交换格式,常用于 Web API 数据传输和配置文件。
  • HTML 网页: 网页中的表格数据。
  • SQL 数据库 (MySQL, PostgreSQL, SQL Server 等): 关系型数据库,用于存储和管理结构化数据。
  • … 以及更多其他数据源。

我们需要将这些 外部数据源中的数据读取到 Pandas DataFrame 中,才能利用 Pandas 强大的数据分析功能进行后续处理和分析。 同样,数据分析的结果也需要 从 DataFrame 中导出到各种文件格式,以便生成报告、共享数据或进行持久化存储。

手动数据导入导出的痛点:低效且易错

对于不熟悉 Pandas 的朋友来说,手动导入导出数据可能是最常用的方式,例如:

  • 手动复制粘贴数据: 从网页、文本文件或 Excel 文件中复制数据,然后粘贴到程序中 (例如 Python 列表、字典)。 这种方式 效率极低容易出错难以处理大量数据,且 无法自动化
  • 手动将分析结果复制粘贴到 Excel: 将程序分析结果复制粘贴到 Excel 表格中,生成报告。 同样 效率低下容易出错格式调整繁琐,且 无法自动化

Pandas 数据 I/O:高效、便捷、自动化的数据交互

Pandas 提供了 强大且便捷的数据 I/O 功能,可以轻松地从各种数据源读取数据到 DataFrame,并将 DataFrame 数据导出到各种文件格式,实现 高效、便捷、自动化的数据交互

  • 代码简洁易用,操作简单高效: 使用 Pandas 提供的 read_* 函数 (例如 pd.read_csv(), pd.read_excel()),几行代码就能读取各种文件格式的数据到 DataFrame。 使用 df.to_* 方法 (例如 df.to_csv(), df.to_excel()),几行代码就能将 DataFrame 数据导出到各种文件格式。
  • 支持多种数据源和文件格式: Pandas 支持读取和写入多种常见的数据源和文件格式,包括 CSV, Excel, 文本文件, JSON, HTML, SQL 数据库等,满足各种数据分析场景的需求。
  • 参数丰富灵活,定制化数据导入导出: Pandas 的数据 I/O 函数和方法提供了丰富的参数,可以灵活地控制数据导入导出的各种细节,例如分隔符、表头、索引、编码格式、数据类型、缺失值处理等,满足各种复杂的数据导入导出需求.
  • 自动化数据处理流程的关键环节: Pandas 数据 I/O 功能是构建自动化数据分析流程的关键环节,可以实现数据自动导入、处理、分析、导出的全流程自动化,解放重复劳动,提高工作效率。

本篇博客将重点讲解 Pandas DataFrame 的 数据读取 (Input)数据写入 (Output) 操作,让你掌握 Pandas 数据 I/O 的核心技能,轻松连接数据世界与 Pandas 数据分析利器,让数据在两者之间自由穿梭!

🔑 一、DataFrame 数据读取 (Input):从外部数据源加载数据

Pandas 提供了丰富的 read_* 函数,用于从各种外部数据源读取数据,并创建 DataFrame 对象。 常用的 read_* 函数包括:

1. pd.read_csv():读取 CSV 文件

pd.read_csv() 函数用于 读取 CSV (Comma Separated Values) 文件,并将数据加载到 DataFrame 对象中。 CSV 文件是最常用的表格数据存储格式之一。

pd.read_csv() 函数基本语法:

df = pd.read_csv(filepath_or_buffer, sep=',', header='infer', index_col=None, encoding=None, dtype=None, parse_dates=False, nrows=None)

常用参数说明 (常用参数):

  • filepath_or_buffer (必需): 文件路径或文件型对象 (字符串或文件对象)。 指定要读取的 CSV 文件的路径。 可以是相对路径、绝对路径或 URL 路径。
  • sep (可选,默认为 ','): 字段分隔符 (separator) (字符串),指定 CSV 文件中字段之间的分隔符,默认为逗号 ,。 如果 CSV 文件使用其他分隔符 (例如制表符 \t、分号 ; 等),需要通过 sep 参数指定。 例如,sep='\t' 表示制表符分隔,sep=';' 表示分号分隔。
  • header (可选,默认为 'infer'): 表头行 (header row),指定哪一行作为列索引 (表头)。
    • header=0: 将 CSV 文件的 第一行 作为列索引。
    • header=None: CSV 文件 没有表头行,Pandas 会自动创建默认的整数列索引 (0, 1, 2, …)。
    • header=[0, 1]: 将 CSV 文件的 多行 (例如第一行和第二行) 作为 多层索引 (MultiIndex) 的列索引。
    • header='infer' (默认值): 自动推断表头行,通常会将 CSV 文件的第一行作为表头行。
  • index_col (可选,默认为 None): 索引列 (index column),指定哪一列作为行索引。
    • index_col=0: 将 CSV 文件的 第一列 作为行索引。
    • index_col=[0, 1]: 将 CSV 文件的 多列 (例如第一列和第二列) 作为 多层索引 (MultiIndex) 的行索引。
    • index_col=None (默认值): 不使用任何列作为行索引,Pandas 会自动创建默认的整数行索引 (0, 1, 2, …)。
  • encoding (可选,默认为 None,通常建议设置为 'utf-8'): 文件编码格式 (encoding) (字符串),指定 CSV 文件的字符编码方式。 强烈建议在读取 CSV 文件时指定 encoding='utf-8',以避免中文乱码问题。 常用的编码格式包括 'utf-8''gbk''latin1' 等。
  • dtype (可选,默认为 None): 列数据类型 (data type) (字典或数据类型名称),指定 每列的数据类型。 例如,dtype={'年龄': 'int64', '销售额': 'float64'} 表示将 ‘年龄’ 列的数据类型设置为 64 位整数,‘销售额’ 列的数据类型设置为 64 位浮点数。 可以使用 Python 内置的数据类型名称 (例如 int, float, str, bool) 或 NumPy 数据类型名称 (例如 'int64', 'float64', 'object')。 如果不指定 dtype,Pandas 会 自动推断 每列的数据类型。
  • parse_dates (可选,默认为 False): 日期解析 (date parsing) (布尔值、列表或字典),指定是否 解析日期时间类型 的列。
    • parse_dates=True: 尝试解析所有列为日期时间类型。 Pandas 会自动识别常见的日期时间格式。
    • parse_dates=['日期', '时间']: 指定要解析为日期时间类型的列名列表
    • parse_dates={'时间戳': ['日期', '时间']}: 将多列合并解析为一个日期时间列,例如将 ‘日期’ 列和 ‘时间’ 列合并解析为 ‘时间戳’ 列。
  • nrows (可选,默认为 None): 读取行数 (number of rows) (整数),指定 读取 CSV 文件的行数 (从文件开头开始读取)。 如果只想读取文件的一部分数据 (例如文件的前几行),可以使用 nrows 参数,提高读取大文件的效率

示例 1:读取 CSV 文件 (默认参数)

假设我们有一个名为 data.csv 的 CSV 文件,内容如下 (逗号分隔,UTF-8 编码,包含表头行):

姓名,年龄,城市
Alice,25,北京
Bob,30,上海
Charlie,28,广州

Python 代码如下:

import pandas as pd

df = pd.read_csv("data.csv") # 使用默认参数读取 CSV 文件
print(df)

输出:

      姓名  年龄  城市
0  Alice   25  北京
1    Bob   30  上海
2  Charlie  28  广州

示例 2:指定分隔符 sep 和编码格式 encoding

假设我们有一个名为 data_tab_separated.txt 的文本文件,内容如下 (制表符 \t 分隔,GBK 编码,包含表头行):

姓名	年龄	城市
Alice	25	北京
Bob	30	上海
Charlie	28	广州

Python 代码如下:

import pandas as pd

df = pd.read_csv("data_tab_separated.txt", sep='\t', encoding='gbk') # 指定分隔符为制表符,编码为 gbk
print(df)

输出结果与示例 1 相同。

示例 3:指定列索引 header 和行索引 index_col

假设我们有一个名为 data_no_header.csv 的 CSV 文件,内容如下 (逗号分隔,UTF-8 编码,没有表头行,第一列为姓名,需要作为行索引):

Alice,25,北京
Bob,30,上海
Charlie,28,广州

Python 代码如下:

import pandas as pd

df = pd.read_csv("data_no_header.csv", header=None, names=['姓名', '年龄', '城市'], index_col=0) # 指定没有表头行,自定义列名,指定第一列为行索引
print(df)

输出:

        年龄  城市
姓名
Alice   25  北京
Bob     30  上海
Charlie 28  广州

代码解释:

  • header=None: 指定 CSV 文件 没有表头行,Pandas 会自动创建默认的整数列索引 (0, 1, 2)。
  • names=['姓名', '年龄', '城市']: 使用 names 参数 自定义列名,将默认的整数列索引替换为自定义的列名列表。
  • index_col=0: 指定 第一列 (位置索引为 0) 作为行索引,DataFrame 的行索引将使用 CSV 文件第一列的数据。

示例 4:指定数据类型 dtype 和日期解析 parse_dates

假设我们有一个名为 sales_data.csv 的 CSV 文件,内容如下 (逗号分隔,UTF-8 编码,包含

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kakaZhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值