這是我第一個關於stackoverflow的問題。到目前爲止,我的所有問題都已經被問到,但即使經過很多研究,我也找不到答案。所以在這裏:包含字符串和數字的ndarrays上的Numpy操作
我想在numpy數組中進行數學運算,爲此我鑄造了一個dtype。這在R中是微不足道的,但在python中很複雜。
import numpy as np
from StringIO import StringIO
test = "a,1,2\nb,3,4"
data = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)
這給了我:
print data
#array([('a', 1, 2), ('b', 3, 4)],
# dtype=[('f0', '|S1'), ('f1', '<i8'), ('f2', '<i8')])
不過,如果我嘗試對數據的數值子集執行任何數學運算,我得到錯誤信息:
subData = data[['f1','f2']]
print subData
# [(1, 2) (3, 4)]
subData+1
#TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'int'
甚至:
subData + subData
#TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray'
我想出的唯一辦法是不是很優雅或實用的一個,因爲我往往失去了列名和類型,以及作爲原始形狀:
subData.view(int) + 1
非常感謝提前。
numpy的結構化數組並不是真的適合這種事情。它們是C類結構的數組,而不是「類似電子表格」的數據。處理它的典型方法是將每列保存在一個單獨的數組中。不過,「熊貓」是一個更好的選擇。它意味着「類似電子表格」的數據。 –