2017-07-15 36 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]]) 
相關問題