2016-09-28 101 views
0

我用scipy的misc.imread加載圖像,這在我的情況下返回2304x3 ndarray。稍後,我將這個數組追加到列表中並將其轉換爲DataFrame。這樣做的目的是稍後在DataFrame上應用Isomap轉換。我的數據框是84行/樣本(文件夾中的圖像),每個功能2304個功能是3個元素的數組/列表。當我嘗試使用Isomap的CWME變換,我得到錯誤:熊貓Dataframe數據類型轉換或等值線轉換

ValueError: setting an array element with a sequence. 

我認爲錯誤是存在的,因爲我的數據幀的元素是對象類型。首先,我嘗試在每列上使用轉換爲n_nmeric,但出現錯誤,然後我寫了一個循環將每個元素轉換爲數字。我得到的結果仍然是對象類型。這裏是我的代碼:

import pandas as pd 
from scipy import misc 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib 
import matplotlib.pyplot as plt 
import glob 
from sklearn import manifold 

samples = [] 
path = 'Datasets/ALOI/32/*.png' 
files = glob.glob(path) 
for name in files: 
    img = misc.imread(name) 
    img = img[::2, ::2] 
    x = (img/255.0).reshape(-1,3) 
    samples.append(x) 

df = pd.DataFrame.from_records(samples, coerce_float = True) 

for i in range(0,2304): 
    for j in range(0,84): 
     df[i][j] = pd.to_numeric(df[i][j], errors = 'coerce') 
    df[i] = pd.to_numeric(df[i], errors = 'coerce') 


print df[2303][83] 
print df[2303].dtype 
print df[2303][83].dtype 

#iso = manifold.Isomap(n_neighbors=6, n_components=3) 
#iso.fit(df) 
#manifold = iso.transform(df) 
#print manifold.shape 

最後四行註釋掉了,因爲它們給出錯誤。我得到的輸出是:

[ 0.05098039 0.05098039 0.05098039] 
object 
float64 

正如你所看到的數據幀中的每個元素的類型爲float64,但是整列是對象

有誰知道如何將整個數據幀轉換爲數字?

是否有另一種應用Isomap的方法?

回答

1

你想重塑你的形象,而不是原來的形狀?

如果不是的話,那麼你應該更改以下行代碼中的

x = (img/255.0).reshape(-1,3) 

x = (img/255.0).reshape(-1) 

希望這將解決您的問題

+0

謝謝阿南德!它確實解決了我的問題。 – semenoff