2016-07-13 5 views
4

Я использую Pandas для хранения данных о ценах акций с использованием фреймов данных. В наборе данных имеется 2940 строк. Снимок Dataset отображается ниже: данныеЗаполните пропущенные значения даты в столбце Dataframe Pandas

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

Я думаю, что вы можете использовать resample с ffill или bfill, но перед set_index из колонны PriceDate:

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 y действителен с DatetimeIndex, TimedeltaIndex или PeriodIndex, но получил экземпляр «RangeIndex» – User456898

+1

Вам нужно установить индекс из столбца «PriceDate» - 'data.set_index ('PriceDate', inplace = True)'. – jezrael

+0

Спасибо, теперь он отлично работает! – User456898