私は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を適用できますか?
はあなたのアナンドをありがとう!それは本当に私の問題を解決しました。 – semenoff