65453

[code]

    　　　　　　time  win_dir win_speed
    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]

上記の1時間刻みのデータを1分間隔に補間するため  
<https://stackoverflow.com/questions/25234941/python-regularise-irregular-
time-series-with-linear-interpolation>  
を参考に出力してみましたが、期待していた結果とは違う結果が出力されてしまいました。

[code]

    df['time'] = pd.to_datetime(df['time'])   # 時間形式のデータに変換
    df2=df.copy()                             # 元のデータをコピー
    df2=df2.set_index('time', inplace=False)  # concateのためのindex変換
    
    new_index = pd.DatetimeIndex(start=df.iloc[0]['time'],end=df.iloc[-1]['time'],
        freq='1min')                                            
                                              # 補間用の空きフレームの作成（2019-01-01 00:00:00～23:59:59）
    new_series = pd.Series(np.nan, index=new_index)
    
    comb_series = pd.concat([df2,new_series]) ### 問題が発生するところ
    comb_series
    
[/code]

[code]

    　　　　　　　　　　win_dir   win_speed   0
    2019-01-01 00:00:00 356.0   0.121   NaN
    2019-01-01 01:00:00 326.0   0.196   NaN
    2019-01-01 02:00:00 313.0   0.257   NaN
    2019-01-01 03:00:00 307.0   0.265   NaN
    2019-01-01 04:00:00 307.0   0.195   NaN
    ... ... ... ...
    2019-12-31 22:56:00 NaN 　　NaN   　　NaN
    2019-12-31 22:57:00 NaN 　　NaN   　　NaN
    2019-12-31 22:58:00 NaN 　　NaN   　　NaN
    2019-12-31 22:59:00 NaN 　　NaN   　　NaN
    2019-12-31 23:00:00 NaN 　　NaN   　　NaN
    
[/code]

最後のところは1分刻みになっていますが、最初のところは刻みの変更がありません。

[code]

    comb_series.interpolate(method='time', inplace=True)
    comb_series
    
[/code]

そのせい、補間の結果が期待に満たしません。

[code]

    　　　　　　　　　　　　win_dir win_speed   0
    2019-01-01 00:00:00 356.000000  0.12100 NaN
    2019-01-01 01:00:00 326.000000  0.19600 NaN
    2019-01-01 02:00:00 313.000000  0.25700 NaN
    2019-01-01 03:00:00 307.000000  0.26500 NaN
    2019-01-01 04:00:00 307.000000  0.19500 NaN
    ... ... ... ...
    2019-12-31 22:56:00 180.733333  0.13380 NaN
    2019-12-31 22:57:00 180.300000  0.13535 NaN
    2019-12-31 22:58:00 179.866667  0.13690 NaN
    2019-12-31 22:59:00 179.433333  0.13845 NaN
    2019-12-31 23:00:00 179.000000  0.14000 NaN
    
    
[/code]

※角度の補間はどうにもpythonでやる方法が分からなく、ここではとりあえず速力の補間の方法だけ練習してみました。

いいコメントよろしくお願いいたします。


CC BY-SA 4.0
2020-04-07T07:24:27.497
65438
2020-04-08T00:44:46.077
2020-04-07T07:54:14.110
3060
37823
question
python python3
concate機能を利用した補間を行う際のエラーについて


先ずコメントされたように、この質問そのものは[XY問題](https://ja.meta.stackoverflow.com/q/2701/26370)で、`resample`が上手くできなかったので試行錯誤している中で出てきた問題というものですね。  
大元の`resample`が上手くできないことを質問した方が良かったでしょう。

「resampleするとデータが空きデータになってしまう」のは、同時に`interpolate`していないからだと思われます。以下の記事の`asfreq()`の例にあるように、特に指定していなければ増えた所には`NaN`が入ります。  
[pandas.DataFrame.resample](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.resample.html)  
[pandasで時系列データをリサンプリングするresample, asfreq](https://note.nkmk.me/python-pandas-
time-series-resample-asfreq/)

`new_index = pd.DatetimeIndex...`以後全体を以下のようにすれば、1行(あるいは2行)で補間が出来ます。

[code]

    # wind_dir,wind_speedがobject(文字列)の場合はTypeErrorが出るのでastype()で変換しておく
    df2 = df2.astype({'wind_dir': 'float64', 'wind_speed': 'float64'})
    df3 = df2.resample('T').interpolate() # 1分単位の resample と補間
    
[/code]

こんな感じの結果になるはずです。

[code]

    >>> print(df3)
                         wind_dir  wind_speed
    time
    2020-01-25 00:00:00   292.500    4.300000
    2020-01-25 00:01:00   292.500    4.318333
    2020-01-25 00:02:00   292.500    4.336667
    2020-01-25 00:03:00   292.500    4.355000
    2020-01-25 00:04:00   292.500    4.373333
    ...                       ...         ...
    2020-01-27 22:56:00   316.500    2.246667
    2020-01-27 22:57:00   316.125    2.260000
    2020-01-27 22:58:00   315.750    2.273333
    2020-01-27 22:59:00   315.375    2.286667
    2020-01-27 23:00:00   315.000    2.300000
    
[/code]

風向については、北(360.0)をまたいで変わる場合や静穏(0.0)の扱いもあるでしょうから、単純な数値の補間では良くないでしょうね。  
上記はpandasで補間が出来るというだけの処理です。

風向をどうすれば良いかの知識は無いので関連しそうな記事がこれかもしれないとだけ紹介しておきます。  
python,pandasではなく、研究そのもの？の記事で、回答の中で色々な資料が紹介されています。  
[How to interpolate wind direction in GIS using
transformation?](https://www.researchgate.net/post/How_to_interpolate_wind_direction_in_GIS_using_transformation)  
[Which interpolation method is sound for interpolating wind direction
data?](https://www.researchgate.net/post/Which_interpolation_method_is_sound_for_interpolating_wind_direction_data)


CC BY-SA 4.0
2020-04-08T00:39:25.073
65453
2020-04-08T00:44:46.077
2020-04-08T00:44:46.077
26370
26370
65438
answer