2016-07-13 6 views
4

저는 Pandas를 사용하여 Data Frames를 사용하여 주가 데이터를 저장하고 있습니다. 데이터 세트에는 2940 개의 행이 있습니다. 데이터 집합의 스냅 샷은 아래에 표시됩니다Pandas Dataframe 열에 누락 된 날짜 값을 입력하십시오.

enter image description here

시계열 데이터는 토요일과 일요일의 값을 포함하지 않습니다. 따라서 누락 된 값을 채워야합니다. 여기
내가 작성한 코드입니다하지만 문제가 해결되지 않습니다

import pandas as pd 
import numpy as np 
import os 
os.chdir('C:/Users/Admin/Analytics/stock-prices') 

data = pd.read_csv('stock-data.csv') 

# PriceDate Column - Does not contain Saturday and Sunday stock entries 
data['PriceDate'] = pd.to_datetime(data['PriceDate'], format='%m/%d/%Y') 
data = data.sort_index(by=['PriceDate'], ascending=[True]) 


# Starting date is Aug 25 2004 
idx = pd.date_range('08-25-2004',periods=2940,freq='D') 


data = data.set_index(idx) 
data['newdate']=data.index 
newdate=data['newdate'].values # Create a time series column 


data = pd.merge(newdate, data, on='PriceDate', how='outer') 

방법 토요일과 일요일의 누락 된 값을 채우기를?

답변

7

난 당신이 ffill 또는 bfillresample를 사용할 수 있다고 생각하지만, 열 PriceDate에서 set_index 전에 :

print (data) 
    ID PriceDate OpenPrice HighPrice 
0 1 6/24/2016   1   2 
1 2 6/23/2016   3   4 
2 2 6/22/2016   5   6 
3 2 6/21/2016   7   8 
4 2 6/20/2016   9   10 
5 2 6/17/2016   11   12 
6 2 6/16/2016   13   14 
data['PriceDate'] = pd.to_datetime(data['PriceDate'], format='%m/%d/%Y') 
data = data.sort_values(by=['PriceDate'], ascending=[True]) 
data.set_index('PriceDate', inplace=True) 
print (data) 
      ID OpenPrice HighPrice 
PriceDate       
2016-06-16 2   13   14 
2016-06-17 2   11   12 
2016-06-20 2   9   10 
2016-06-21 2   7   8 
2016-06-22 2   5   6 
2016-06-23 2   3   4 
2016-06-24 1   1   2 

data = data.resample('D').ffill().reset_index() 
print (data) 
    PriceDate ID OpenPrice HighPrice 
0 2016-06-16 2   13   14 
1 2016-06-17 2   11   12 
2 2016-06-18 2   11   12 
3 2016-06-19 2   11   12 
4 2016-06-20 2   9   10 
5 2016-06-21 2   7   8 
6 2016-06-22 2   5   6 
7 2016-06-23 2   3   4 
8 2016-06-24 1   1   2 

data = data.resample('D').bfill().reset_index() 
print (data) 
    PriceDate ID OpenPrice HighPrice 
0 2016-06-16 2   13   14 
1 2016-06-17 2   11   12 
2 2016-06-18 2   9   10 
3 2016-06-19 2   9   10 
4 2016-06-20 2   9   10 
5 2016-06-21 2   7   8 
6 2016-06-22 2   5   6 
7 2016-06-23 2   3   4 
8 2016-06-24 1   1   2 
+0

사용 bfill() .reset_index() 다음 TypeError가 표시됩니다. Onl DatetimeIndex, TimedeltaIndex 또는 PeriodIndex에서 유효하지만 'RangeIndex'인스턴스가 있습니다. – User456898

+1

'PriceDate' -'data.set_index ('PriceDate', inplace = True)'열에서 인덱스를 설정해야합니다. – jezrael

+0

고마워, 지금은 괜찮아! – User456898

관련 문제