读取混合类型的文件(浮点数和字符串)

时间:2014-02-24 15:13:37

标签: python numpy io

我有一个由N列和M行组成的数据文件,我需要读取它们将每列存储到数组/列表中。该文件通常用数字(浮点数)填充,在这种情况下我可以这样做:

import numpy as np
f_data = np.loadtxt('file.dat', unpack=True)

,结果是存储在f_data中的列作为其元素为floats的子列表,如预期的那样。

其他时候文件可以散布随机字符串(请参阅此类文件的示例here)在这些情况下,我需要以相同的方式读取它(即:使用列表中存储的每个列解压缩/数组及其中的所有元素存储为float类型),所有字符串都转换为默认浮点数(例如99.999

在上面数据文件的示例中,列5在阅读后会如下所示:

f_data[5]
[2.049, 0.946, 0.942, 0.889, 99.999, 0.879, 0.989, 1.142, 1.062, 0.551, 1.233, 0.503]

请注意,所有元素都是float类型,找到的字符串已转换为99.999并存储为浮点数。

np.genfromtxt能够读取具有混合类型的文件,但结果是所有浮点数都存储为字符串,这不是我需要的。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

np.genfromtxt就是答案,但要让它正常工作会有点棘手。

尝试:

np.genfromtxt("file.txt", dtype=float, filling_values=99.99)

在每种情况下,这会强制类型为浮点数。当numpy找到一个不是float的值时,它声明该值无效,因此丢失。填充值为缺少数据时的操作提供了默认答案,在您的情况下为99.99。

并且,要按要求进行编辑,要按列存储,请添加unpack = True,以获得总答案,

np.genfromtxt("file.txt", dtype=float, filling_values=99.99, unpack=True)