如何用NumPy读取CSV文件

  • Post category:Python

用 NumPy 读取 CSV 文件是一项非常基础的任务,可以采用 genfromtxt()loadtxt() 函数来完成。下面是使用 NumPy 读取 CSV 文件的步骤:

步骤1:导入 NumPy 模块

首先需要在代码中导入 NumPy 模块,以便使用 NumPy 库中的各种函数和方法来操作 CSV 文件。可以使用以下代码导入 NumPy 模块:

import numpy as np

步骤2:使用 genfromtxt()loadtxt() 函数加载 CSV 文件

接下来可以使用 genfromtxt()loadtxt() 函数来加载 CSV 文件。它们两个的主要区别在于如何处理缺失值。

genfromtxt()

genfromtxt() 函数可以处理含有缺失值的 CSV 文件,默认情况下将缺失值替换为 nan (NumPy 中的特殊值),具有更好的灵活性。以下是使用 genfromtxt() 函数加载 CSV 文件的示例代码:

my_data = np.genfromtxt('my_file.csv', delimiter=',', skip_header=1)

在这个示例中,genfromtxt() 函数从名为 my_file.csv 的文件读取数据,使用逗号作为分隔符,跳过第一行(即标题行),并将结果保存到 my_data 变量中。

loadtxt()

loadtxt() 函数不能处理含有缺失值的 CSV 文件,但是在处理简单文件时比 genfromtxt() 更快,并且使用更少内存。以下是使用 loadtxt() 函数加载 CSV 文件的示例代码:

my_data = np.loadtxt('my_file.csv', delimiter=',', skiprows=1)

在这个示例中,loadtxt() 函数从名为 my_file.csv 的文件读取数据,使用逗号作为分隔符,跳过第一行(即标题行),并将结果保存到 my_data 变量中。

示例

以下是两个示例,展示了使用 NumPy 读取 CSV 文件的不同用法:

示例1:简单情况

假设有一个名为 grades.csv 的文件,其中包含学生的成绩记录,如下所示:

Name, Age, Gender, Grade
Tom, 25, M, 70
Lisa, 20, F, 85
John, 26, M, 60

通过使用以下代码可以读取这个文件:

my_data = np.genfromtxt('grades.csv', delimiter=',', skip_header=1, dtype=None)

在结果中,每一列的名称对应原始 CSV 文件中的列名,如下所示:

array([('Tom', 25, 'M', 70), ('Lisa', 20, 'F', 85), ('John', 26, 'M', 60)],
      dtype=[('Name', '<U4'), ('Age', '<i4'), ('Gender', '<U1'), ('Grade', '<i4')])

示例 2:处理缺失值的情况

假设有一个名为 grades2.csv 的文件,其中包含学生的成绩记录,但其中一行是空白的:

Name, Age, Gender, Grade
Tom, 25, M, 70
, , ,
Lisa, 20, F, 85
John, 26, M, 60

通过使用以下代码可以读取这个文件,同时将空白行替换为 nan

my_data = np.genfromtxt('grades2.csv', delimiter=',', skip_header=1, missing_values='', filling_values=np.nan, dtype=None)

在结果中,nan 值表示原始 CSV 文件中该位置的空白行:

array([('Tom', 25., 'M', 70.), (nan, nan, nan, nan),
       ('Lisa', 20., 'F', 85.), ('John', 26., 'M', 60.)],
      dtype=[('Name', '<U4'), ('Age', '<f8'), ('Gender', '<U1'), ('Grade', '<f8')])

以上是使用 NumPy 读取 CSV 文件的详细介绍,包括了导入 NumPy 模块、使用 genfromtxt()loadtxt() 函数加载 CSV 文件以及两个使用示例。