インデックスがdatetimeの22列のパンダデータフレームがあります。Sci-kit-learnノーマライズで列見出しが削除される
私は、次のコードを使用してこのデータを正規化しようとしています:
from sklearn.preprocessing import MinMaxScaler
# Normalization
scaler = MinMaxScaler(copy = False)
normal_data = scaler.fit_transform(all_data2)
問題は、私はこの機能を適用することによって、大量のデータを失うことを、例えば、ここの前にはされています
all_data2.head(n = 5)
Out[105]:
btc_price btc_change btc_change_label eth_price \
time
2017-09-02 21:54:00 4537.8338 -0.066307 0 330.727
2017-09-02 22:29:00 4577.6050 -0.056294 0 337.804
2017-09-02 23:04:00 4566.3600 -0.059716 0 336.938
2017-09-02 23:39:00 4590.0313 -0.056242 0 342.929
2017-09-03 00:14:00 4676.1925 -0.035857 0 354.171
block_size difficulty estimated_btc_sent \
time
2017-09-02 21:54:00 142521291.0 8.880000e+11 2.040000e+13
2017-09-02 22:29:00 136524566.0 8.880000e+11 2.030000e+13
2017-09-02 23:04:00 134845546.0 8.880000e+11 2.010000e+13
2017-09-02 23:39:00 133910638.0 8.880000e+11 1.990000e+13
2017-09-03 00:14:00 130678099.0 8.880000e+11 2.010000e+13
estimated_transaction_volume_usd hash_rate \
time
2017-09-02 21:54:00 923315359.5 7.417412e+09
2017-09-02 22:29:00 918188066.9 7.152505e+09
2017-09-02 23:04:00 910440915.6 7.240807e+09
2017-09-02 23:39:00 901565929.9 7.284958e+09
2017-09-03 00:14:00 922422228.4 7.152505e+09
miners_revenue_btc ... n_blocks_mined \
time ...
2017-09-02 21:54:00 2395.0 ... 168.0
2017-09-02 22:29:00 2317.0 ... 162.0
2017-09-02 23:04:00 2342.0 ... 164.0
2017-09-02 23:39:00 2352.0 ... 165.0
2017-09-03 00:14:00 2316.0 ... 162.0
n_blocks_total n_btc_mined n_tx nextretarget \
time
2017-09-02 21:54:00 483207.0 2.100000e+11 241558.0 483839.0
2017-09-02 22:29:00 483208.0 2.030000e+11 236661.0 483839.0
2017-09-02 23:04:00 483216.0 2.050000e+11 238682.0 483839.0
2017-09-02 23:39:00 483220.0 2.060000e+11 237159.0 483839.0
2017-09-03 00:14:00 483223.0 2.030000e+11 237464.0 483839.0
total_btc_sent total_fees_btc totalbtc \
time
2017-09-02 21:54:00 1.620000e+14 2.959788e+10 1.650000e+15
2017-09-02 22:29:00 1.600000e+14 2.920230e+10 1.650000e+15
2017-09-02 23:04:00 1.600000e+14 2.923498e+10 1.650000e+15
2017-09-02 23:39:00 1.580000e+14 2.899158e+10 1.650000e+15
2017-09-03 00:14:00 1.580000e+14 2.917904e+10 1.650000e+15
trade_volume_btc trade_volume_usd
time
2017-09-02 21:54:00 102451.92 463497284.7
2017-09-02 22:29:00 102451.92 463497284.7
2017-09-02 23:04:00 102451.92 463497284.7
2017-09-02 23:39:00 102451.92 463497284.7
2017-09-03 00:14:00 96216.78 440710136.1
[5 rows x 22 columns]
その後、新しい索引が正規化された(これは日付列ではありません)、すべての列ヘッダーが削除されるnumpy
配列が取得されます。
元のデータフレームの選択された列のみをインプレース状態に保ちながら何とか正規化できますか?
もしそうでなければ、正規化されたnumpy配列から目的の列のみを選択して元のdfに戻すにはどうすればよいですか?
あなたの提案は、次のメッセージで動作します。/Applications/anaconda/lib/python3.6/site-packages/sklearn/preprocessing/data.py:160:UserWarning:データのセンタリング時に数値問題が発生した可能性があります。解決されません。データセットに含まれる値が大きすぎる可能性があります。あなたはあなたのフィーチャーをプリスケールする必要があるかもしれません。 warnings.warn( "数値問題が発生しました" 'しかし、データを手動で検査すると、すべてがスケーリングされたように見えますが、' 'pd''と' 'sklearn''の間にインターフェースはありませんか? – zsad512
列内の値を変更せずに元のdfのコピーを返すようにしていますか?通常のセットとスケーリングされたセットでそれぞれのアルゴリズムを実行して、 – zsad512