2017-04-25 22 views
1

私は以下のようなパンダのデータフレームを持っています。パンダのデータフレームをlibsvm形式に変換するには?

df 
Out[50]: 
    0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96 97 \ 
0 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 
1 0 1 1 1 0 0 1 1 1 1 ... 0 0 0 0 0 0 0 0 
2 1 1 1 1 1 1 1 1 1 1 ... 0 0 0 0 0 0 0 0 
3 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 
4 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 
5 1 0 0 1 1 1 1 0 0 0 ... 0 0 0 0 0 0 0 0 
6 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 
7 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 

[8 rows x 100 columns] 

次のような配列としてターゲット変数があります。

[1, -1, -1, 1, 1, -1, 1, 1] 

どのようにこのターゲット変数をデータフレームにマップし、それをlibのSVMフォーマットに変換できますか。

equi = {0:1, 1:-1, 2:-1,3:1,4:1,5:-1,6:1,7:1} 
df["labels"] = df.index.map[(equi)] 
d = df[np.setdiff1d(df.columns,['indx','labels'])] 
e = df.label 
dump_svmlight_file(d,e,'D:/result/smvlight2.dat')er code here 

ERROR:

File "D:/spyder/april.py", line 54, in <module> 
df["labels"] = df.index.map[(equi)] 

TypeError: 'method' object is not subscriptable 

私は

df["labels"] = df.index.list(map[(equi)]) 

ERROR使用:

AttributeError: 'RangeIndex' object has no attribute 'list' 

をそれらのエラーを解決するために私を助けてください。

答えて

1

私はあなたがindexto_seriesを変換してからmapを呼び出す必要があると思う:

df["labels"] = df.index.to_series().map(equi) 

それともindexrenameを使用します。

df["labels"] = df.rename(index=equi).index 

すべて一緒:

列パンダの違いについては、differenceを持っています:

from sklearn.datasets import dump_svmlight_file 

equi = {0:1, 1:-1, 2:-1,3:1,4:1,5:-1,6:1,7:1} 

df["labels"] = df.rename(index=equi).index 
e = df["labels"] 
d = df[df.columns.difference(['indx','labels'])] 

dump_svmlight_file(d,e,'C:/result/smvlight2.dat') 

また、label列が必要ではないようです。

from sklearn.datasets import dump_svmlight_file 

equi = {0:1, 1:-1, 2:-1,3:1,4:1,5:-1,6:1,7:1} 
e = df.rename(index=equi).index 
d = df[df.columns.difference(['indx'])] 
dump_svmlight_file(d,e,'C:/result/smvlight2.dat') 
+0

私は最初のオプションを使用していました。エラーがクリアされました。ありがとう – banu

+0

しかし、次のエラーは次のようになります。 – banu

+0

TypeError: 'str'と 'int'のインスタンス間で '>'がサポートされていません – banu

関連する問題