如何将混合数据类型的文件读入 Python 中的 numpy 数组?
How to read file with mixed data type into a numpy array in Python?
如何在 Python 中将混合数据类型的文件读入 numpy 数组?
我是 python 新手。我正在尝试将具有混合数据类型的现有文件读取到 numpy 数组中。
文件data.txt的内容(如果逗号不是很好的符号,可以用space代替):
,'A','B','C','D'
'A', 0, 3, 5, -1
'B', 3, 0, 1, 6
'C', 5, 1, 0, 2
'D', -1, 6, 2, 0
预期输出的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 ]])
您可以使用 pandas.read_csv
:
>>> 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
然后您可以使用 .values
:
访问底层数组
>>> df.values
array([[ 0, 3, 5, -1],
[ 3, 0, 1, 6],
[ 5, 1, 0, 2],
[-1, 6, 2, 0]], dtype=int64)
至少据我所知,不可能将该文件读入普通(非对象)二维数组,因为记录数组要求任何列遵循相同的类型。虽然它可以用于倒数第二行 (str, int, int, int, int)
,但不能用于第一行 (NoneType, str, str, str, str)
。至少使用 pandas 您可以将第一行和第一列解释为可以具有不同类型的索引。
然而,如果您不需要第一行和第一列,您可以使用 np.loadtxt
:
>>> 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]])
如何在 Python 中将混合数据类型的文件读入 numpy 数组?
我是 python 新手。我正在尝试将具有混合数据类型的现有文件读取到 numpy 数组中。
文件data.txt的内容(如果逗号不是很好的符号,可以用space代替):
,'A','B','C','D'
'A', 0, 3, 5, -1
'B', 3, 0, 1, 6
'C', 5, 1, 0, 2
'D', -1, 6, 2, 0
预期输出的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 ]])
您可以使用 pandas.read_csv
:
>>> 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
然后您可以使用 .values
:
>>> df.values
array([[ 0, 3, 5, -1],
[ 3, 0, 1, 6],
[ 5, 1, 0, 2],
[-1, 6, 2, 0]], dtype=int64)
至少据我所知,不可能将该文件读入普通(非对象)二维数组,因为记录数组要求任何列遵循相同的类型。虽然它可以用于倒数第二行 (str, int, int, int, int)
,但不能用于第一行 (NoneType, str, str, str, str)
。至少使用 pandas 您可以将第一行和第一列解释为可以具有不同类型的索引。
然而,如果您不需要第一行和第一列,您可以使用 np.loadtxt
:
>>> 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]])