2016-12-30 6 views
-1

背景 数値の列を出力するcsvデータシートを扱います。私は、最初の列を取る、浮動小数点(すなわち、45時間半= 45.5)の時間をユーザーに求め、最初の列からその数値を減算するプログラムに取り組んでいます。私はその点で成功しています。今、「ゼロ」時点の行インデックスを見つける必要があります。そのインデックスを見つけて、それを次の列A1から呼び出すためにminを使用します。私は データフレーム列を浮動小数点数で分割しようとします。NaN

time_zero = float(input("Which time would you like to be set to 0?")) 
df['A1']= df['A1']-time_zero 

ので、グラフ上、0時点での読み取りが(私のために、最終的にすべての後続の列が、赤ちゃんの手順)欄A1に1であるためにA1を正規化、その後に時間0で読書を見つける必要があります

ゼロ時間を設定するにはこれまでのところうまく動作します。

zero_location_series = df[df['A1'] == df['A1'].min()] 
r1 = zero_location_series[' A1.1'] 
df[' A1.1'] = df[' A1.1']/r1 

ここで問題が発生します。最初の行は、私の他のすべての列に対して引き出すことができる系列を正しく識別します。次にr1は適切なA1.1値を正しく識別し、type(r1)を使用するとこの値は浮動小数点になります。 しかし、私がdf[' A1.1']/r1を分けると、正しい値が1つしか得られず、その値はr1/r1 = 1です。その他の値はNaNです。

私の質問:私は推測するフロートによって列を分割する方法

  1. ?なぜ私はNaNを取得していますか?
  2. 私は16列のためにこれを行う必要があるとして、これを行うためのより高速な方法はあります。(すなわち「A2/R2」「A3/R3」など)
  3. 私が作るためにどこにでもインプレース= Trueの何をする必要があります操作はデータを保存する前に固執しますか?または行を追加/削除するためだけのものですか?この ようになります

DATAFRAME! http://i.imgur.com/ObUzY7p.png ゼロ時間が正しく設定されています(画像は表示されません)

http://i.imgur.com/TpLUiyE.png

+1

あなたは、問題を実証する自己完結型の例を示していることはできますか? – BrenBarn

+0

オペランドの1つが 'NaN'のときに' NaN'を得ることがよくあります – user86895

答えて

0

あなたはR1で列のすべての値を分割したい場合には、例えば、適用するのが最善です:

df = df["A1.1"].apply(lambda x: x/r1, 0) 

この:

import pandas as pd 
df = pd.DataFrame([1,2,3,4,5]) 
# apply an anonymous function to the first column ([0]), divide every value 
# in the column by 3 
df = df[0].apply(lambda x: x/3.0, 0) 
print(df) 

だからあなたは、おそらくこのような何かをしたいと思います本当にあなたの質問のパート2に答えるだけです。適用はおそらく、複数の行と列の関数をすばやく実行するための最善の策です。浮動小数点数で割ったときになぜナンを得るのかについては、列の値が浮動小数点数や整数以外のものである可能性はありますか?

+0

これは機能します!私は今新しい問題を抱えていますが、私はおそらく自分でそれをトラブルシューティングすることができると思います。申し訳ありませんが、私はこの回答に時間がかかりすぎていました(休暇を過ごして時間を過大評価してしまいました)。ありがとうございました。 –

1

これは動作するはずです:

df['A1.1']=df['A1.1']/df['A1.1'].min() 

私はr1シリーズですのでdf[' A1.1'] = df[' A1.1']/r1が機能しなかった理由だったと思います。 type(r1)の代わりにr1?を試してください。r1はシリーズであり、個々のフロート番号ではありません。

1つの試みでそれを行うには、このように、各列を反復処理する必要があります。

for c in df: 
    df[c] = df[c]/df[c].min() 
関連する問題