如何在Python中将混合数据类型的文件读入numpy数组?

如何在Python中将混合数据类型的文件读入numpy数组?,python,arrays,numpy,readfile,mixed,Python,Arrays,Numpy,Readfile,Mixed,如何在Python中将混合数据类型的文件读入numpy数组 我是一个新的python学习者。我正在尝试将一个具有混合数据类型的现有文件读入numpy数组 文件data.txt的内容(如果逗号不是一个好符号,可以用空格代替): 预期的输出numpy数组如下所示: array([[None,'A','B','C','D'], ['A', 0, 3, 5, -1 ], ['B', 3, 0, 1, 6 ], ['C', 5, 1, 0,

如何在Python中将混合数据类型的文件读入numpy数组

我是一个新的python学习者。我正在尝试将一个具有混合数据类型的现有文件读入numpy数组

文件data.txt的内容(如果逗号不是一个好符号,可以用空格代替):

预期的输出numpy数组如下所示:

array([[None,'A','B','C','D'],
       ['A',  0,  3,  5, -1 ],
       ['B',  3,  0,  1,  6 ],
       ['C',  5,  1,  0,  2 ],
       ['D', -1,  6,  2,  0 ]])
您可以使用:

然后,您可以使用
值访问底层数组:

>>> df.values
array([[ 0,  3,  5, -1],
       [ 3,  0,  1,  6],
       [ 5,  1,  0,  2],
       [-1,  6,  2,  0]], dtype=int64)

至少据我所知,无法将该文件读入普通(非对象)2D数组,因为记录数组要求任何列都遵循相同的类型。虽然它可以用于最后第二行
(str,int,int,int,int)
,但不能用于第一行
(NoneType,str,str,str,str)
。至少使用pandas,您可以将第一行和第一列解释为可以具有不同类型的索引

但是,如果不需要第一行和第一列,可以使用:


可能的重复使用普通numpy数组(如果是2D数组,则至少不可能)无法准确获得预期的输出。但是,您可以尝试将其读入
pandas.DataFrame
>>> import pandas as pd

>>> df = pd.read_csv('data.txt', index_col=0, sep=',')
>>> print(df)
     'A'  'B'  'C'  'D'

'A'    0    3    5   -1
'B'    3    0    1    6
'C'    5    1    0    2
'D'   -1    6    2    0
>>> df.values
array([[ 0,  3,  5, -1],
       [ 3,  0,  1,  6],
       [ 5,  1,  0,  2],
       [-1,  6,  2,  0]], dtype=int64)
>>> import numpy as np

>>> np.loadtxt('myfile.txt', delimiter=',', skiprows=1, usecols=[1,2,3,4], dtype=int)
array([[ 0,  3,  5, -1],
       [ 3,  0,  1,  6],
       [ 5,  1,  0,  2],
       [-1,  6,  2,  0]])