2017-07-15 25 views
-1

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

我是一名新的python学习者。我试图读取混合数据类型的现有文件到一个numpy数组中。

文件data.txt中的(如果逗号不是一个好的符号,可以通过空间取代)的含量:

,'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 ]]) 
+1

的可能的复制[?如何读取CSV到numpy的记录阵列(https://stackoverflow.com/questions/3518778/how-to-read-csv-into-record-array-in-numpy) –

+1

有没有可能的方法来获得一个普通的numpy数组(至少不是如果这是一个2D数组)。但是你可以尝试将它读入一个'pandas.DataFrame'中。 – MSeifert

回答

1

你可以使用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 

您可以再与0123访问底层数组:

>>> 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)。至少在大熊猫中,可以将第一行和第一列解释为可以具有不同类型的索引。

但是,如果你不需要的第一行和列,你可以使用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]]) 
相关问题