2017-07-15 17 views
-1

混合データ型のファイルをPythonのnumpy配列に読み込む方法は?混合データ型のファイルをPythonのnumpy配列に読み込む方法は?

私は新しいPython学習者です。私は、混合データ型の既存のファイルを数値の配列に読み込もうとしています。

ファイル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

可能な複製を(https://stackoverflow.com/question/3518778/how-to-read-csv-into-record-array-in-numpy) –

+1

普通の数字の配列(少なくとも2次元配列でない場合)で期待される出力を正確に得る方法はありません。しかし、それを '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) 

は、少なくとも私の知る限り、それは、レコード配列は任意の列が同じタイプに従うことを必要とするため、プレーン(非オブジェクト)の2D配列にそのファイルを読み出すことはできません。それは2番目の最後の行(str, int, int, int, int)のために働くことができたが、最初の行(NoneType, str, str, str, str)のために働くことができなかった。少なくともパンダでは、最初の行と最初の列を異なるタイプのインデックスとして解釈できます。

しかし、あなたが最初の行と列を必要としない場合は、np.loadtxt使用できます[?numpyののレコードの配列にCSVを読み取る方法]の

>>> 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]]) 
関連する問題