将.dat文件作为数组导入

2024-04-26 04:57:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的.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中的两种主要方法,它们似乎没有提供所需的结果。


Tags: 文件数据noneid列表datanp数组
2条回答

您可能需要使用numpy loadtext。可以指定不同列的格式。

这里有一种方法,我们读取“mydat.dat”文件的每一行,将每个值转换为strfloat,然后加载到numpyarray

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
>>> 

相关问题 更多 >