2017-03-04 50 views
1

嘿,我有問題,創建從波士頓數據集的數據幀(可以在這裏找到:https://archive.ics.uci.edu/ml/datasets/Housing創建數據集循環FUNC數據幀

所以這是我的代碼:

data1 = DataFrame(data= np.c_[boston['data'], boston['target']], 
        columns= boston['feature_names']+ ['Price']) 

而且類似的代碼工作正常使用不同的數據集(即「光圈」數據集) 但是現在它返回typerror:

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U7') dtype('<U7') dtype('<U7') 

有什麼問題這一個,哪能TWEA k它? 謝謝!

編輯:我想出了什麼是錯的,feature_names是一個數組而不是一個列表,所以我必須將其轉換爲列表,它工作正常。 這裏是wroking代碼感興趣:

data1 = DataFrame(data= np.c_[boston['data'], boston['target']], 
        columns= (boston['feature_names']).tolist()+ ['Price']) 

回答

0

我想你需要read_fwf

cols = ['col1','col2','col3','col4','col5','col6','col7', 
     'col8','col9','col10','col11','col12','col13','col14'] 
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data' 
df = pd.read_fwf(url, header=None, names=cols) 

print (df.head()) 
     col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 \ 
0 0.00632 18.0 2.31  0 0.538 6.575 65.2 4.0900  1 296.0 15.3 
1 0.02731 0.0 7.07  0 0.469 6.421 78.9 4.9671  2 242.0 17.8 
2 0.02729 0.0 7.07  0 0.469 7.185 61.1 4.9671  2 242.0 17.8 
3 0.03237 0.0 2.18  0 0.458 6.998 45.8 6.0622  3 222.0 18.7 
4 0.06905 0.0 2.18  0 0.458 7.147 54.2 6.0622  3 222.0 18.7 

    col12 col13 col14 
0 396.90 4.98 24.0 
1 396.90 9.14 21.6 
2 392.83 4.03 34.7 
3 394.63 2.94 33.4 
4 396.90 5.33 36.2 

如果需要過濾列添加參數usecols

df = pd.read_fwf(url, header=None, names=cols, usecols=['col10','col13']) 

print (df.head()) 
    col10 col13 
0 296.0 4.98 
1 242.0 9.14 
2 242.0 4.03 
3 222.0 2.94 
4 222.0 5.33 

不是100%是什麼你需要用你的代碼,也許總計2列,然後通過subset過濾列:

boston['new'] = boston['feature_names'] + boston['Price'] 
df = boston[['data', 'target', 'new']].copy() 
+0

我從sklearn.datasets加載的設置,所以我不認爲我需要使用read_fwf。不過,我對Iris數據集做了同樣的處理(sklearn中的不同數據集,我也沒有看到它們之間的格式差異),我的代碼工作正常。 –

+0

好吧,那麼請添加'print(boston.head())'來問題並添加所需的輸出 - 'df' – jezrael

+0

其實我現在看到它了。波士頓數據集的feature_names只是列表的數組intead。數據幀(data = np.c_ [boston ['data'],boston ['target']], columns =(boston ['feature_names'])。tolist()+ ['Price'])' This Works !,謝謝 –