2016-08-03 12 views
3

Datetime、lat、lon、zの列を持つデータフレームがあります。私はcsvファイルからデータを読み込んでいるので、datetimesの期間を設定することはできません。時間は6時間間隔ですが、私は線形にデータを時間間隔に補間したいと思います。パンダ新しい長さでデータフレームを補間する

ゴー

 'A'    'B' 'C' 'D' 
0 2010-09-13 18:00:00 16.3 -78.5 1 
1 2010-09-14 00:00:00 16.6 -79.8 6 
2 2010-09-14 06:00:00 17.0 -81.1 12 

から

 'A'    'B' 'C' 'D' 
1 2010-09-13 18:00:00 16.3 -78.5 1  
2 2010-09-13 19:00:00 16.35 -78.7 2 
3 2010-09-13 20:00:00 16.4 -78.9 3 
4 2010-09-13 21:00:00 16.45 -79.1 4 
5 2010-09-13 22:00:00 16.5 -79.3 5 
.... 

に私は、補間コマンドを使用して試してみましたが、データフレームの新しい長さには引数はありません。

df.interpolate(method='linear') 

私は、データフレーム内の各ライン間のナンの5行を含めることの.locを使用して、補間関数を使用することができることを考えていたが、それは悪い回避策のように思えます。あなたの最初の列がdatetime型としてインポートされなかった場合DatetimeIndexを使用して

ソリューション は、他の列との関連を排除します。

i = pd.DatetimeIndex(start=df['A'].min(), end=df['A'].max(), freq='H') 
df = df.reindex(i).interpolate() 
print(df) 

正しい答えを示します。

+0

サンプルデータはDatetime、lat、lon ...のみです。zはどこですか? – piRSquared

答えて

1
i = pd.DatetimeIndex(start=df.index.min(), end=df.index.max(), freq='H') 
df = df.reindex(i).interpolate() 
print(df) 

出力

2010-09-13 18:00:00 16.300000 -78.500000 
2010-09-13 19:00:00 16.350000 -78.716667 
2010-09-13 20:00:00 16.400000 -78.933333 
2010-09-13 21:00:00 16.450000 -79.150000 
2010-09-13 22:00:00 16.500000 -79.366667 
  1. DatetimeIndexdocs)を使用して所望の周波数の新しいインデックスを作成します。

  2. reindexdocs)この新しいインデックスです。デフォルトでは、新しいインデックスの値はnp.nanになります。

  3. interpolatedocs)これらの欠損値を記入してください。補間の方法を決定するために、method kwargを指定することができます。

+0

これは、lat/lonがdatetimeインデックスを持つと仮定して動作します。しかし、元のインデックスが1-3で、時間が「A」と表示されている最初の列にある場合はどうでしょうか? – BenT

+0

'set_index'([docs](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.set_index.html))を使用して、その列をインデックスとして使用できます。 – Alex

関連する問題