2016-09-28 15 views
0

私はscipyのmisc.imreadで画像を読み込みます。これは私の場合2304x3 ndarrayで返します。その後、この配列をリストに追加し、DataFrameに変換します。これを行う目的は、後でDataFrameにIsomapトランスフォームを適用することです。私のデータフレームは84行/サンプル(フォルダ内の画像)であり、2304個のフィーチャは各フィーチャの配列/ 3要素のリストです。私はIsomap変換を使用してみたとき、私はエラーを取得:Pandas Dataframeデータ型変換またはIsomap変換

ValueError: setting an array element with a sequence. 

を私は私のデータフレームの要素がオブジェクト型であるため、エラーがあると思います。まず、各列でto_numericという変換を使用してみましたが、エラーが発生しました。次に、各要素を数値に変換するループを作成しました。私が得た結果は依然としてオブジェクト型です。ここに私のコードはあります:

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 

最後の4行は、エラーが発生したためコメントアウトされています。私が手出力は次のようになります。

[ 0.05098039 0.05098039 0.05098039] 
object 
float64 

あなたがデータフレームの各要素はタイプのfloat64のですが、全体の列がオブジェクトで見ることができるように。

誰もデータフレーム全体を数値に変換する方法を知っていますか?

別の方法でIsomapを適用できますか?

答えて

1

オリジナルのイメージではなく新しいシェイプにイメージを変更しますか?

が一致しない場合、あなたはあなたのコード内で

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

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

を次の行を変更する必要があります希望、これはあなたの問題を解決します

+0

はあなたのアナンドをありがとう!それは本当に私の問題を解決しました。 – semenoff

関連する問題