使用 numpy.genfromtxt 读取文本和CSV文件的指南

【注】:该文章运行结果的numpy版本官方最新2.1版本, 运行结果不同可能是版本问题
在数据科学和分析中,处理文本和CSV文件是常见的任务。numpy 提供了一个强大的函数 numpy.genfromtxt,能够灵活地读取包含缺失值的数据。本文将介绍如何使用 numpy.genfromtxt 读取不同格式的数据,包括处理缺失值和自定义分隔符的情况。

基本用法

读取没有缺失值的文本文件

当数据中没有缺失值时,可以使用 numpy.loadtxt 来读取数据。但当数据中包含缺失值时,建议使用 numpy.genfromtxt

读取包含缺失值的CSV文件

假设我们有一个名为 csv.txt 的文件,内容如下:

1, 2, 3
4,, 6
7, 8, 9

我们可以使用以下代码来读取这个文件:

import numpy as np

# 读取带有缺失值的CSV文件,并返回掩码数组
masked_array = np.genfromtxt("csv.txt", delimiter=",", usemask=True)
print(masked_array)

输出结果为:

masked_array(
  data=[[1.0, 2.0, 3.0],
        [4.0, --, 6.0],
        [7.0, 8.0, 9.0]],
  mask=[[False, False, False],
        [False,  True, False],
        [False, False, False]],
  fill_value=1e+20)

如果我们希望得到一个填充缺失值的数组,可以使用以下代码:

# 读取数据并用 np.nan 填充缺失值
array_output_nan = np.genfromtxt("csv.txt", delimiter=",")
print(array_output_nan)

输出结果为:

array([[ 1.,  2.,  3.],
       [ 4., nan,  6.],
       [ 7.,  8.,  9.]])

我们还可以指定一个填充值来替换缺失值。例如:

# 用指定的填充值填充缺失值
array_output_fill_value = np.genfromtxt("csv.txt", delimiter=",", dtype=np.int8, filling_values=99)
print(array_output_fill_value)

输出结果为:

array([[ 1,  2,  3],
       [ 4, 99,  6],
       [ 7,  8,  9]], dtype=int8)

处理空白分隔符的数据

numpy.genfromtxt 也可以处理空白分隔符的数据文件。例如,假设我们有一个固定宽度的文件 fixedwidth.txt,内容如下:

1   2      3
44      6
7   88889

我们可以使用以下代码读取该文件:

data = np.genfromtxt("fixedwidth.txt", delimiter=4)
print(data)

输出结果为:

array([[1.000e+00, 2.000e+00, 3.000e+00],
       [4.400e+01,       nan, 6.000e+00],
       [7.000e+00, 8.888e+03, 9.000e+00]])

指定缺失值

有时,数据文件中可能使用特定字符表示缺失值。例如,假设 nan.txt 文件的内容如下:

1 2 3
44 x 6
7  8888 9

我们可以将 x 指定为缺失值:

array_with_missing_values = np.genfromtxt("nan.txt", missing_values="x")
print(array_with_missing_values)

输出结果为:

array([[1.000e+00, 2.000e+00, 3.000e+00],
       [4.400e+01,       nan, 6.000e+00],
       [7.000e+00, 8.888e+03, 9.000e+00]])

跳过缺失值的行

在某些情况下,您可能希望跳过包含缺失值的行。为此,可以设置 invalid_raise=False

data_to_skip = np.genfromtxt("skip.txt", invalid_raise=False)
print(data_to_skip)

这里的 skip.txt 文件内容为:

1 2   3
44    6
7 888 9

输出结果为:

array([[  1.,   2.,   3.],
       [  7., 888.,   9.]])

处理不同分隔符的情况

如果数据以制表符(\t)分隔且缺失值用空格表示,我们可以使用以下代码读取:

data_tabs = np.genfromtxt("tabs.txt", delimiter="\t", missing_values=" +")
print(data_tabs)

tabs.txt 文件的内容如下:

1       2       3
44              6
7       888     9

输出结果为:

array([[  1.,   2.,   3.],
       [ 44.,  nan,   6.],
       [  7., 888.,   9.]])

结论

numpy.genfromtxt 是一个非常灵活和强大的工具,能有效地读取和处理包含缺失值和不同分隔符的数据文件。通过本文提供的示例,您可以轻松地在自己的项目中应用它。无论是处理CSV文件还是其他格式的文本文件,numpy.genfromtxt 都能帮助您快速而高效地获取所需的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值