2017-06-12 54 views
0

我有一個從csv創建的數組,但第一行包含每列的標題。它必須是一個str,但是由於大多數數據是浮動的,現在它是一個float64。如何在Python中更改數組中一行的類型?

的代碼是下面的代碼創建矩陣:

self.data = np.genfromtxt(self.path, delimiter=",") 

我需要在第一行更改爲字符串,但如果我使用:

self.data[0] = self.data[0].astype(str) 

它返回的「楠的一排,我不明白的事情。

謝謝。

+1

「numpy」中不能有異構類型的數組。 –

+0

作爲'object' dtype讀入,然後將第二行向前設置爲'float'類型:'a = np.genfromtxt(path,delimiter =「,」,dtype = object)','a [1:] = a [ 1:] astype(浮點)'。? – Divakar

+0

如果您不想將該文本行用作數組中的字段(列)名稱,則可以使用skip_header參數跳過它。 – hpaulj

回答

0

np.genfromtxt函數通過將數組和數組轉換爲數組的數據類型(在本例中爲float64)來生成np.ndarray。當你將它重新設置爲string時,它已經被鑄造爲float64,所以它被讀爲NaN,因爲大概你的標題不是數字。

幸運的是,該函數有一種方法來提取標題。 By using the "names" parameter:np.genfromtxt(self.path, delimiter=",", names=True),該函數還會從輸入文件的第一行返回一列列標題。

+0

謝謝,使標題變得更容易。 – Ignacio

1

如果您有列名稱,您可以使用names參數將其拉出。

import numpy as np 
data = np.genfromtxt('data.csv', delimiter=",", names=True) 

data 

array([(1., 4., 7.), (2., 5., 8.), (3., 6., 9.)], 
     dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')]) 

你現在可以做的事情一樣data['a']獲得命名'a'

您也可以訪問data.dtype.names列名,其將返回所有列名的元組數組。 ('a', 'b', 'c')

相關問題