2017-05-22 12 views
0

皆さん、私が使用している大きなデータセットを扱う方法として、Excel VBA経由でPythonに来てくれました。データフレームにループがありません。

深度ベースのデータセットがいくつかあります。実際の最高のデータ解像度に合わせるためにいくつかのデータセットを「取り込む」必要があります(画像クラスタリングの場合)。画像は0.01mmのデータを取得していますが、測定データセットの一部は約40mmのサンプルです。下記のコードを使用して、ポイントから測定データをスケールする

私はデータフレームでポイントを逃し、私のVBAに戻って(??悪い)習慣

データセット、私は約50,000行である上でこれをテストすることだし、size変数を落下てる感が設定されている取得します200(すなわち、合計40mmの場合、それぞれの方向に200×0.1mm)。

将来的には、abcのそれぞれのIR画像配列スタイルデータでこれを行うことがあります。

私は、繰り返しのために、これは現在、時間をかけていることがわかります。

初期DF

Depth | Item1 | Item 2 | Item3 
----- |-------|--------|------ 
10.01 | a | b | c 
10.02 | d | e | f 
10.03 | h | i | j 

新DF

Depth | Item1 | Item 2 | Item3 
----- |-------|--------|------ 
etc 
10.008 | a | b | c 
10.009 | a | b | c 
**10.010 | a | b | c** 
10.011 | a | b | c 
10.012 | a | b | c 
etc 
--------------------------------- 
etc 
10.018 | d | e | f 
10.019 | d | e | f 
**10.020 | d | e | f** 
10.021 | d | e | f 
10.022 | d | e | f 
etc 
:私の不器用コード物事の規模一般的な概念があるが無視

def new_depth(df, size): 
    x=0 
    for i in df['Depth']: 
     x=+1 
     measured_data = df.iloc[x, :] 
     for y in range(size): 
      if y!=0: 
       added_p = i+y 
       added_n = i-y 
       measured_data["Depth"] = added_p 
       df.loc[len(df)] = measured_data 
       measured_data["Depth"] = added_n 
       df.loc[len(df)]=measured_data 

かかわらず見ることができますそこに脳があることを望ん

+0

あなたの 'new_depth'機能は何を達成するはずですか?入力としてサンプルのデータフレームを提供し、そのデータフレームにメソッドを適用した場合の期待される出力を提供できる場合に最適です。 – Metropolis

+0

@Metropolis、私は上記の質問を再掲しました。うまくいけば、これは少し上手くいくと説明しています。情報をスタックオーバーフローにするのに慣れています。私はここから何年も答えを得てきましたが、これは私の最初の投稿です!! –

答えて

1
step=0.001 
df2 = df.reindex(pd.Float64Index(np.arange(df.index[0], df.index[-1]+step, step=step).round(3))).ffill() 

は、インデックス

範囲

np.arange(df.index[0], df.index[-1]+step, step=step).round(3)df.index[-1]+steprange

array([ 10.01 , 10.011, 10.012, 10.013, 10.014, 10.015, 10.016, 
     10.017, 10.018, 10.019, 10.02 , 10.021, 10.022, 10.023, 
     10.024, 10.025, 10.026, 10.027, 10.028, 10.029, 10.03 ]) 

になり、これは '深さ' を使用して、最後のインデックスが含まれていることを確認することです。 .round(3)は、丸め誤差を防ぐためです。浮動小数点の比較は難しいことです。

pd.Float64Index(<range>)指数

は、インデックスを作成します。このステップを実行しなくても動作しますが、より明示的にします。

再インデックス

df.reindex(<index>)セットこれはDataFrameのための新たな指標として、インデックスを作成し、このインデックスに一致するdfで古いエントリを見つけようとします。これは.ffil()が前の行からのアイテムを持つ空の項目を満たし

ffil NaN

Item1 Item 2 Item3 
Depth   
10.010 a b c 
10.011 NaN  NaN  NaN 
10.012 NaN  NaN  NaN 
10.013 NaN  NaN  NaN 
10.014 NaN  NaN  NaN 
10.015 NaN  NaN  NaN 
10.016 NaN  NaN  NaN 
10.017 NaN  NaN  NaN 
10.018 NaN  NaN  NaN 
10.019 NaN  NaN  NaN 
10.020 d e f 
10.021 NaN  NaN  NaN 
10.022 NaN  NaN  NaN 
10.023 NaN  NaN  NaN 
10.024 NaN  NaN  NaN 
10.025 NaN  NaN  NaN 
10.026 NaN  NaN  NaN 
10.027 NaN  NaN  NaN 
10.028 NaN  NaN  NaN 
10.029 NaN  NaN  NaN 
10.030 h i j 

と他の行を埋めます。あなたが最大5項目を記入する必要がある場合は.ffil(limit=5)を使用することができます。ffill.fillna(method='ffill)の同義語です

+0

これは、@Mateen Fabreに感謝しています。インデックスとしての深みを得ようと努力してきましたが、捨て去ってしまったflaot64ラインは、私が今後取り組むべき他の仕事を助けてくれるでしょう。また、ツールボックスに持っていると便利です。 –

+0

Okだから、コードから予期していたように、再インデックスがあまり見えないようです。インデックスの列は現在0.01、0.02などで表示されています。私は 'df.index [-1] + step'が10.001などになりますが、私は何かが欠けている可能性がありますので、ゼロ値の新しいインデックスを作成し、それにステップを追加します –

+1

私は解答の説明を分かりやすくするために分割しました。まだ謎がある場合は、 –

関連する問題