2016-07-13 13 views
4

Ich verwende Pandas, um Aktienkurse Daten mit Datenrahmen zu speichern. Das Dataset enthält 2940 Zeilen. Der Datensatz Snapshot wird unten angezeigt:Füllen Sie die fehlenden Datumswerte in einer Pandas Dataframe Spalte

enter image description here

Die Zeitreihen-Daten enthalten nicht die Werte für Samstag und Sonntag. Daher müssen fehlende Werte gefüllt werden.
Hier ist der Code, den ich geschrieben habe, aber es löst nicht das Problem:

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

Wie die fehlenden Werte für Samstag und Sonntag füllen?

Antwort

7

Ich glaube, Sie resample mit ffill oder bfill, aber vor set_index aus Spalte PriceDate verwenden:

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

Bei der Verwendung von bfill() .reset_index(), Der folgende TypeError wird angezeigt: Onl y ist gültig mit DatetimeIndex, TimedeltaIndex oder PeriodIndex, hat aber eine Instanz von 'RangeIndex' – User456898

+1

Sie müssen den Index aus der Spalte 'PriceDate' -' data.set_index ('PriceDate', inplace = True) 'setzen. – jezrael

+0

Danke, es funktioniert jetzt gut! – User456898

Verwandte Themen