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的方法?
謝謝阿南德!它確實解決了我的問題。 – semenoff