2016-04-12 4 views
2

私はこのような日付が欠けているデータセットを持っています。パンダで日付が欠落している時系列データを完成させる方法

date,value 
2015-01-01,7392 
2015-01-03,4928 
2015-01-06,8672 

これは私が達成しようとしているものです。

date,value 
2015-01-01,7392 
2015-01-02,7392 # ffill 1st 
2015-01-03,4928 
2015-01-04,4928 # ffill 3rd 
2015-01-05,4928 # ffill 3rd 
2015-01-06,8672 

私は、ドキュメントを読んで、私はsolutioniを見つけることができなかった、多くのことを試してみました。私はdf.resample( 'd'、fill_method = 'ffill')を使って推測しましたが、ここにはまだ届いていません。誰も私が問題を解決するのを助けることができますか?

これは私がやったことです。

>>> import pandas as pd 
>>> df = pd.read_csv(text,sep="\t",index_col='date') 
>>> df.index = df.index.to_datetime() 
>>> index = pd.date_range(df.index[1],df.index.max()) 

ここで、DatetimeIndexは2015-01-01から2015-01-06になります。

>>> values = [ x for x in range(len(index)) ] 
>>> df2 = pd.DataFrame(values,index=index) 

次に、元のデータとDatetimeIndexをマージします。

>>> df + df2 

      0 value 
2015-01-01 NaN NaN 
2015-01-02 NaN NaN 
2015-01-03 NaN NaN 
2015-01-04 NaN NaN 
2015-01-05 NaN NaN 
2015-01-06 NaN NaN 

NaNの?私は困惑している。

>>> df3 = df + df2 
>>> df3.info() 

DatetimeIndex: 10 entries, 2015-01-01 to 2015-01-10 
Data columns (total 2 columns): 
value 0 non-null float64 
dtypes: float64(1) 

元の値はintですが、floatに変換されました。

私の間違いは何ですか?

+1

df.resample( 'd'、fill_method = 'ffill')を試してみたらどうなりますか? – ayhan

+0

私はこれを私の答えの編集として追加したいと思っていましたが、あなたは私にそれを打ちました。あなたの提案に間違いがないなら、私は自分の答えを削除します。 – IanS

+0

私はOPがそれを試みたが、何かが間違っていたと思う。私は問題は、時間の形式(2015-01-02は2月1日ではなく2月1日と評価される)に関するものだと推測しています。ところで、これをあなたの答えに自由に追加してください。それは私のものではないOP自身の解決です。 :) – ayhan

答えて

0

これを試してみてください。彼らが存在する場合に

import numpy as np 
df2 = pd.DataFrame(np.nan, index=index) 
df.combine_first(df2).fillna(method='ffill') 

combine_firstは、元dfから値をdf2nan値を置き換えます。残りのnanの値はfillnaと入力します。

+0

ありがとうございました! あなたのコメントがうまくいって、私はそれを達成しました! – quattie

関連する問題