2016-12-09 2 views
1

私はPythonで私の問題を解決する方法を見つけようとします。私はpandasを使用して、データフレームを作成してクエリからデータを保存しています。下の表に示すように、このデータフレームを「TimeDiff」列で拡張したいと考えています。時間の最初の要素から時間を減算する計算が機能しています。私の問題は、正しい値でこの計算されたデータを使って新しい列を作成する方法です。データフレーム内のforループの値を保存する

Time     Temperature  Humidity  Pulse 
2013-12-12 12:12:12 25    33   65  
2013-12-12 12:12:15 26    30   67  
2013-12-12 12:12:18 27    29   68  
2013-12-12 12:12:22 28    32   64  


Data frame should look like this: 

Time     Temperature  Humidity  Pulse  TimeDiff 
2013-12-12 12:12:12 25    33   65  0 
2013-12-12 12:12:15 26    30   67  3 
2013-12-12 12:12:18 27    29   68  6 
2013-12-12 12:12:22 28    32   64  10 

の時間差を計算するための私のコードとデータフレームに追加し、次のようになりますので、

TimeDiff 
740 
740 
740 
740 

:このコードを実行する

df = pd.DataFrame([[ij for ij in i] for i in rows]) 
df.rename(columns={0: 'Time', 1: 'Temperature', 2: 'Humidity', 3: 'Pulse', 4:'MicValue'}, inplace=True); 
df = df.sort(['Time'], ascending=[1]); 
sLength = len(df['Time']) 

for i in range(sLength): 
     diff = df['Time'][df.index[i]] - df['Time'][df.index[0]] 
     totalSeconds = diff.total_seconds() 
     # df = pd.DataFrame({'DateDiff': totalSeconds}, index=df.index) 
     # df['Diff'] = df['Diff'].map(totalSeconds) 

は、次のような結果が得られますコードは実際のデータをデータフレームに書き出しません。それは、時間の計算の最後の要素を列全体に書き込むだけです。

答えて

1

インデックス全体から最初のインデックスを単に差し引くことができます。

df['TimeDiff'] = df.index - df.index[0] 

そして、あなたは秒を取得したい場合は、

(df.index - df.index[0]).seconds 

を行うことができますまたはあなたが持っている場合は、あなたの列がdtアクセサ

df.TimeDiff.dt.seconds 
+0

そうそうを使用するには、それははるかに簡単です。 –

+0

大変ありがとうございます。あなたのコードをスニッフィングしていただきありがとうございます。このようなエラーメッセージが表示されます: 'TypeError:入力は反復可能でなければなりません! ' – Daniel

+0

列Timeがインデックスで、datetimeオブジェクトであることを確認してください。 'df.index = pd.to_datetime(df.Time) –

関連する問題