2016-04-12 18 views
2

Böyle eksik tarihleri ​​olan veri kümem var.Zaman serisi verilerini pandalarla eksik tarihlerle nasıl doldurulur?

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

Bunu başarmayı umduğum şey budur.

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 

Ben belgelerini okuyun, çok çalıştım, ama bir solutioni bulamadık. Df.resample ('d', fill_method = 'ffill') kullanarak tahmin ettim, ancak hala burada değilim. Sorunu çözmeme yardım eden var mı?

Yaptığım şey budur.

>>> 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()) 

İşte 2015-01-01 den 2015-01-06 için DatetimeIndex olsun.

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

Sonraki Ben orijinal veri ve DatetimeIndex birleştirmek için gidiyorum.

>>> 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? Şaşkınım.

>>> 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) 

Özgün değer int, ancak float'a dönüştürüldü.

Hatam nedir?

+1

Df.resample ('d', fill_method = 'ffill') denediğinizde sorun nedir? – ayhan

+0

Bunu cevabımda bir düzenleme olarak eklemek istedim, ama sen beni buna yendin. Önerinizle ilgili bir sorun yoksa, cevabımı sileceğim. – IanS

+0

Sanırım OP bunu denedi ama bir şeyler ters gitti. Problemin zaman formatıyla ilgili olduğunu tahmin ediyorum (2015-01-02, 2 Ocak'tan ziyade 1 Şubat olarak değerlendiriliyor). Bu şekilde cevabınıza bunu eklemekten çekinmeyin, bu OP'nin kendi çözümü değil. :) – ayhan

cevap

0

bu deneyin: var olduğu

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

combine_first orijinal df gelen değerlerle df2 yılında nan değerlerin yerine geçer. Ardından kalan nan değerlerini fillna ile doldurabilirsiniz.

+0

Çok teşekkür ederim! Yorumunuz işe yaradı ve başardım! – quattie

İlgili konular