

1時間刻みの年間データがあります。  
このデータを1分刻みのデータとして補間したいですが、  
23時までの内挿する方法しか分かりません。  
23時01分から23時59分までの外挿方法について教えてください。

本当に基礎的な部分だと思いますが、いい方法が見つからないのでお願いいたします。

* * *
[code]

    df2=df.resample('1T').interpolate()
    
[/code]

**対象の年間データ**

[code]

    0   2019-01-01 00:00:00 356 0.121
    1   2019-01-01 01:00:00 326 0.196
    2   2019-01-01 02:00:00 313 0.257
    3   2019-01-01 03:00:00 307 0.265
    4   2019-01-01 04:00:00 307 0.195
    ... ... ... ...
    8755    2019-12-31 19:00:00 55  0.151
    8756    2019-12-31 20:00:00 28  0.090
    8757    2019-12-31 21:00:00 348 0.036
    8758    2019-12-31 22:00:00 205 0.047
    8759    2019-12-31 23:00:00 179 0.140
    
[/code]

**実行結果**

[code]

    2019-01-01 00:00:00 356.000000  0.12100 
    2019-01-01 00:01:00 355.500000  0.12225 
    2019-01-01 00:02:00 355.000000  0.12350 
    2019-01-01 00:03:00 354.500000  0.12475 
    2019-01-01 00:04:00 354.000000  0.12600 
    ... ... ... ...
    2019-12-31 22:56:00 180.733333  0.13380 
    2019-12-31 22:57:00 180.300000  0.13535 
    2019-12-31 22:58:00 179.866667  0.13690 
    2019-12-31 22:59:00 179.433333  0.13845 
    2019-12-31 23:00:00 179.000000  0.14000
    
[/code]


CC BY-SA 4.0
2020-04-16T03:41:33.923
65666
2020-04-16T10:02:50.080
2020-04-16T07:03:27.960
3060
37823
question
python python3 pandas
resampleを用いた外挿 (データ補間) を行いたい


そもそも「外挿」で補間して良いデータなのでしょうか？

「23時までの内挿する方法しか」と書いてありますが、存在しないのは2019-12-31の1日だけの23時～24時の1時間であって、他の日のデータは存在します。

処理する時点では既に過去の記録なので、2020-01-01 00:00:00時点の実際のデータは存在しているはずです。  
そのデータを無視して「外挿」しても意味は無いのでは？

その最後の1時間分をシミュレーションして実際のデータと対比させてみる、とかなら有りかもしれませんが、それはそのシミュレーションプログラムをどう作るかという問題であって、客観的な解決法があるかは疑問です。

補間前のデータの最後に2020-01-01 00:00:00時点の実際のデータを1件追加してから補間すれば良いでしょう。

結果に2020-01-01 00:00:00のデータがあると、例えば次に行う処理で問題になるのであれば、結果からその1件だけ削除すれば良いでしょう。

* * *

年間データ(1年分)というくくりで言えば2020年は完了していないからデータは揃っていないので入手は出来ないでしょうが、1月1日のデータだけで良いのですから1月1日を含む月間/週間/1日のデータならば取得出来るのでは？

それも駄目ならこちらのサイトで入手できるデータに切り替えるとか。それでプログラムの確認や調整は出来るでしょう。その間に2020年1月1日のデータを入手できるか探ってみるとか。  
[気象庁 | 過去の気象データ検索](https://www.data.jma.go.jp/obd/stats/etrn/index.php) / [気象庁
| 過去の気象データ・ダウンロード](https://www.data.jma.go.jp/gmd/risk/obsdl/index.php)


CC BY-SA 4.0
2020-04-16T04:17:11.980
65668
2020-04-16T10:02:50.080
2020-04-16T10:02:50.080
26370
26370
65666
answer


[`pandas.DataFrame.resample`](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.resample.html)
でアップサンプリングする所に関しては、端点のひとつ外側へ値が NaN な点を事前に追加しておくというやり方はあります。

[code]

    # index の型が datatime64 な場合
    df[np.datetime64('2020-01-01 00:00')] = np.nan
    
[/code]

問題は補完です。このようにして増やした NaN な点を
[`pandas.DataFrame.interpolate`](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.interpolate.html)
でどのように補完すべきかは、よく検討が必要と思います。

一般に時系列データの外挿をするにはそのデータがどのような特性を持っていると仮定しているかの情報が必要です。たとえば `interpolate`
のデフォルトである `method='linear'` では思ったような結果は得られないでしょう。

もし外挿のやり方が SciPy で実装されている範囲にあるのなら、`interpolate` の `method`
に指定することで使うことができます。`slinear` や `quadratic` などを使えます。詳しくは [`interpolate`
のドキュメント](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.interpolate.html)をご覧ください。

また、ちゃんと試していませんが、NaN の位置によって補完する順番に注意がいりそうです。関連 issue：

  * [Enhancement Request: control extrapolation on .interpolate](https://github.com/pandas-dev/pandas/issues/16284) \-- pandas-dev/pandas
  * [pandas.Dataframe.interpolate() does not extrapolate even if it is asked to, depending on interpolation method](https://github.com/pandas-dev/pandas/issues/31949) \-- pandas-dev/pandas


CC BY-SA 4.0
2020-04-16T07:33:26.283
65673
2020-04-16T07:33:26.283
19110
65666
answer