将.dat文件作为数组导入

5
我有一个看起来像这样的.dat文件。
ID_1,5.0,5.0,5.0,... 
ID_2,5.0,5.0,5.0,...

我想把数据作为数组导入Python。
如果这样做,它将给我一个元组列表。
data = np.genfromtxt('mydat.dat',
                     dtype=None,
                     delimiter=',')

然而,当我执行以下操作时,结果很奇怪,可能是因为第一个元素不是浮点数。
np.fromfile('mydat.dat', dtype=float)

array([  3.45301146e-086,   3.45300781e-086,   3.25195588e-086, ...,
         8.04331780e-096,   8.04331780e-096,   1.31544776e-259])

对此有什么建议吗?这两种将.dat文件作为数组导入Python的主要方法似乎都不能提供所需的结果。


这些行的格式总是那样吗?像ID,然后是一些值,以及一个换行符分隔数据行,你想要一个二维数组吗?列表是否可以代替数组? - Jacobr365
没有新列表,我已经修复了。需要二维数组。最终目标是在Keras中使用这些数据,因此我需要将其作为一个数组。 - ATMA
2个回答

5

有一种方法是我们读取“mydat.dat”文件的每一行,将每个值转换为 str float ,然后加载到 numpy array 中。

import numpy as np

def is_float(string):
    """ True if given string is float else False"""
    try:
        return float(string)
    except ValueError:
        return False

data = []
with open('mydat.dat', 'r') as f:
    d = f.readlines()
    for i in d:
        k = i.rstrip().split(",")
        data.append([float(i) if is_float(i) else i for i in k]) 

data = np.array(data, dtype='O')

结果

>>> data
array([['ID_1', 5.0, 5.0, 5.0],
       ['ID_2', 5.0, 5.0, 5.0]], dtype=object)

此外,如果您可以使用pandas来读取和操作数据,那么我建议您这样做。对于较大的数据,pandas的效率更高,并且易于操作。
#read data as csv to a dataframe
>>> df = pd.read_csv('mydat.dat', sep=",", header=None)
>>> df
      0    1    2    3
0  ID_1  5.0  5.0  5.0
1  ID_2  5.0  5.0  5.0

#Transposed data with ID numbers as headers
>>> df.T
      0     1
0  ID_1  ID_2
1     5     5
2     5     5
3     5     5
>>> 

3
你可能想使用numpy loadtext。你可以指定不同列的格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接