鉴于以下两个仅包含字符串的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
答案 0 :(得分:3)
您可以使用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']]
答案 1 :(得分: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')