我有一个由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
能够读取具有混合类型的文件,但结果是所有浮点数都存储为字符串,这不是我需要的。
我该怎么做?
答案 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)