1

文字列のみを含む次の 2 つの csv ファイルがある場合、それらを (numpy) 配列にロードするにはどうすればよいですか?

**1.txt**
A,B,D
E,G,A

**2.txt**
A,B,D
E,G,A

**data**
1,A,B,D
1,E,G,A
2,A,B,D
2,E,G,A
4

2 に答える 2

4

次を使用してロードできますnumpy.loadtxt

>>> import numpy as np
>>> data1 = np.loadtxt("1.txt", dtype=np.object, delimiter=",")
>>> data2 = np.loadtxt("2.txt", dtype=np.object, delimiter=",")
>>> print data1
 [['A' 'B' 'D']
  ['E' 'G' 'A']]

両方の配列をスタックする場合は、次を使用しますnumpy.vstack

>>> np.vstack( (data1, data2) )
 [['A' 'B' 'D']
  ['E' 'G' 'A']
  ['A' 'B' 'D']
  ['E' 'G' 'A']]

ソースを追加する場合は、次のようにします。

>>> first_col = np.vstack( (np.array([[1] * data1.shape[0]]).T, np.array([[2] * data2.shape[0]]).T) )
>>> stack = np.vstack( (data1, data2) )
>>> data = np.hstack( (first_col, stack) )
>>> print data
 [[1 'A' 'B' 'D']
  [1 'E' 'G' 'A']
  [2 'A' 'B' 'D']
  [2 'E' 'G' 'A']]

保存形式で保存したい場合:

>>> np.savetxt('data.txt', data, fmt='%s', delimiter=",")

これにより、 data.txtが生成されます。

1,A,B,D
1,E,G,A
2,A,B,D
2,E,G,A

更新:無制限の数のファイルを処理するための関数 (ファイルは、質問で指定したのと同じ方法で .txt 拡張子の付いた数字として名前が付けられていると想定しています: 1.txt、2.txt、3.txt... n.txt ):

import numpy as np

def get_from_csv(fname):
    data = np.loadtxt(fname, dtype=np.object, delimiter=",")
    col = np.array([[ int(fname.rstrip(".txt")) ] * data.shape[0]]).T
    return np.hstack( (col, data) )

files = ["1.txt", "2.txt", "3.txt"]

for f in files:
    try:
        data = np.vstack( (data, get_from_csv(f)) )
    except:
        data = get_from_csv(f)
print data

どちらが出力されますか:

[[1 'A' 'B' 'D']
 [1 'E' 'G' 'A']
 [2 'A' 'B' 'D']
 [2 'E' 'G' 'A']
 [3 'A' 'B' 'D']
 [3 'E' 'G' 'A']]
于 2013-09-24T09:48:40.763 に答える
1

あなたが使用することができますgenfromtxt

>>> a=np.genfromtxt('1.txt',dtype=None,delimiter=',')
>>> b=np.genfromtxt('2.txt',dtype=None,delimiter=',')
>>> data = np.vstack((a,b))
>>> data
array([['A', 'B', 'D'],
       ['E', 'G', 'A'],
       ['A', 'B', 'D'],
       ['E', 'G', 'A']], 
       dtype='|S1')

「1」と「2」を追加する必要がある場合は、次のようにします。

>>> c= np.ones((2,1),dtype=int)
>>> d = c*2
>>> a = np.hstack((c,a))
>>> b = np.hstack((d,b))
>>> data = np.vstack((a,b))
>>> data
array([['1', 'A', 'B', 'D'],
       ['1', 'E', 'G', 'A'],
       ['2', 'A', 'B', 'D'],
       ['2', 'E', 'G', 'A']], 
      dtype='|S1')
于 2013-09-24T11:21:38.937 に答える