2015-12-16 70 views
3

我使用命令作爲讀取.csv文件在python讀取數據:numpy的:從具有數字CSV作爲字符串

data = np.genfromtxt('home_data.csv', dtype=float, delimiter=',', names=True) 

此CSV具有郵政編碼其是標記但在字符串格式,用於一列的例如「85281」。此列值楠:

data['zipcode'] 
Output : array([ nan, nan, nan, ..., nan, nan, nan]) 

我怎樣才能在字符串轉換這些數值爲整數,以獲得值的數組,而不是「男的。

回答

1

你必須幫助genfromtxt一點:

data = np.genfromtxt('home_data.csv', 
dtype=[int,float],delimiter=',',names=True, 
converters={0: lambda b:(b.decode().strip('"'))}) 

每個字段收集字節。 float(b'1 \ n')返回1.0,但float(b'「8210」')給出錯誤。轉換器選項允許爲每個字段(此處爲字段0)定義一個函數來執行正確的轉換,此處轉換爲字符串(解碼)和刪除(剝離)尾隨的"

如果home_data.csv是:

zipcode,val 
"8210",1 
"8320",2 
"14",3 

你將獲得:

data -> array([(8210, 1.0), (8320, 2.0), (14, 3.0)], dtype=[('zipcode', '<i4'), ('val', '<f8')]) 
data['zipcode'] -> array([8210, 8320, 14]) 
1

也許不是最有效的解決方案,但是看了你的數據爲string,之後將其轉換爲float

data = np.genfromtxt('home_data.csv', dtype=float, delimiter=',', names=True) 


zipcode = data['zipcode'].astype(np.float) 

順便說一句,有沒有要保存一個郵編爲float理由嗎?

相關問題