2017-03-08 8 views
1

私はpandas.DataFrameに列にタイムスタンプを持っています。値は、エポックで0.1秒間隔です。値は1488771900.100000, 1488771900.200000などです。ただし、欠損値があります。だから私は1488794389.500000を持って、次に1488794389.900000の間に3つの値がない。この列の最大値と最小値の間に欠損値があるデータフレームに行を挿入するとします。したがって、最小値が1488771900.000000、最大値が1488794660.000000の場合は、すべての値を0.1秒で区切って行を挿入し、他のすべての列にはNAを挿入します。パンダのデータフレームに欠けている時間を追加する

私はこのlinkの答えを見ましたが、同じものを複製することはできませんでした。

この操作はどのように実行できますか?

+0

ポストが働いてきたはずですリンクされ、生投稿してくださいデータ、dfを作成するためのコード、あなたの試行およびエラー – EdChum

答えて

2

pandas.DataFrame.resampleを使用して、不足している時間を入力できます。注意すべき点は、データフレームにpandas.DateTimeIndexが必要であることです。あなたのケースでは、時間はエポックから数秒で浮動小数点として格納される可能性があります。これは、再サンプリングの前に変換する必要があります。この操作を実行する関数を次に示します。

コード:

import datetime as dt 
import pandas as pd 

def resample(dataframe, time_column, sample_period): 
    # make a copy of the dataframe 
    dataframe = dataframe.copy() 

    # convert epoch times to datetime 
    dataframe.time = dataframe.time.apply(
     lambda ts: dt.datetime.fromtimestamp(ts)) 

    # make the datetimes into an index 
    dataframe.set_index(time_column, inplace=True) 

    # resample to desired period 
    dataframe = dataframe.resample(sample_period).asfreq().reset_index() 

    # convert datetimes back to epoch 
    epoch = dt.datetime.fromtimestamp(0) 
    dataframe.time = dataframe.time.apply(
     lambda ts: (ts - epoch).total_seconds()) 
    return dataframe 

テストコード:

values = [ 
    (1488771900.10, 'a'), 
    (1488771900.20, 'b'), 
    (1488771900.30, 'c'), 
    (1488771900.60, 'f'), 
] 
columns = ['time', 'value'] 
df = pd.DataFrame(values, columns=columns) 
print(df) 

new_df = resample(df, 'time', '100ms') 
print(new_df) 

結果:

  time value 
0 1.488772e+09  a 
1 1.488772e+09  b 
2 1.488772e+09  c 
3 1.488772e+09  f 

      time value 
0 1.488772e+09  a 
1 1.488772e+09  b 
2 1.488772e+09  c 
3 1.488772e+09 NaN 
4 1.488772e+09 NaN 
5 1.488772e+09  f 
+0

これは良い答えですが、大きなデータフレームで '.apply()'が遅くなることがあります。代わりに、 'df ['time'] = pd.to_datetime(df ['time']、unit = 's')'をチェックしてみてください。(more [here](https://stackoverflow.com/a/19231939/2327328 )) – philshem

関連する問題