データフレームのすべてのfloat64列でDataFrameMapper Imputer + Scalerマッピングを使用します。私のコードはStandardScalerで動作しますが、Imputerを追加すると、マッパーはすべてのゼロが1行だけを返します。データフレーム上のDataFrameMapperでImputerを使用するには?
私はこの質問 Imputer on some Dataframe columns in Pythonとチュートリアルhttps://github.com/paulgb/sklearn-pandasを見て、警告があります:
のsite-packages \ sklearn \ utilsの\ validation.py:386:DeprecationWarning:データが推奨されませんよう は1D配列を渡すには、 0.17と値上がりで 0.19のValueError。 データに単一のフィーチャーがある場合はX.reshape(-1、1)、または単一サンプルが の場合はX.reshape(1、-1)を使用してデータを再整形します。
私は形状の不一致があることを理解しています。以下の例のデータフレームは、どのように再構成する必要がありますか?
import pandas as pd
import numpy as np
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import StandardScaler, Imputer
# just a random dataframe from http://pandas.pydata.org/pandas-docs/stable/10min.html
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print "Starting with a random dataframe of 6 rows and 4 columns of floats:"
print df.shape
print df
mapping=[('A', [Imputer(), StandardScaler()]), ('C', [Imputer(), StandardScaler()])]
mapper = DataFrameMapper(mapping)
result = mapper.fit_transform(df)
print "I get an unexpected result of all zeroes in just one row."
print result.shape
print result
print "Expected is a dataframe of 2 columns and 6 rows of scaled floats."
print "something like this:"
mapping=[('A', [StandardScaler()]), ('C', [StandardScaler()])]
mapper = DataFrameMapper(mapping)
result_scaler = mapper.fit_transform(df)
print result_scaler.shape
print result_scaler
この出力
Starting with a random dataframe of 6 rows and 4 columns of floats.
(6, 4)
A B C D
2013-01-01 -0.070551 0.039074 0.513491 -0.830585
2013-01-02 -0.313069 -1.028936 2.359338 -0.830518
2013-01-03 -1.264926 -0.830575 0.461515 0.427228
2013-01-04 -0.374400 0.619986 0.318128 0.361712
2013-01-05 -0.235587 -1.647786 -0.819940 -1.036435
2013-01-06 1.436073 0.312183 1.566990 -0.272224
Unexpected result is all zeroes in just one row.
(1L, 12L)
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
Expected is a dataframe of 2 columns and 6 rows of scaled floats.
something like this
(6L, 2L)
[[ 0.08306789 -0.21892275]
[-0.21975387 1.61986719]
[-1.40829622 -0.27069922]
[-0.29633508 -0.4135387 ]
[-0.12300572 -1.54725542]
[ 1.964323 0.83054889]]
そしてフォローアップの質問は - 私のオリジナルデータフレームはフロート、ブール値とオブジェクト(ラベル)の組み合わせです。私は
floats = list(df.select_dtypes(include=['float64']).columns)
mapping=[(f, [Imputer(missing_values=0,strategy="mean"), StandardScaler()]) for f in floats]
のリストを持っているときにどのように私はちょうどそれらの列のために(Imputerのためにそれを形作る)データフレームを準備するだろうか?