2016-07-13 7 views
4

で欠落している日付の値を入力します。データセットには2940行あります。データセットのスナップショットは下に表示されます。私はデータフレームを使用して株価データを保存するためにパンダを使用しているパンダのデータフレームの列

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を使用することができると思うが、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 DatetimeIndex、TimedeltaIndexまたはPeriodIndexとの有効なYが、 'のRangeIndex' のインスタンス – User456898

+1

あなたが列 'PriceDate'から設定されたインデックス必要だ - ' data.set_index( 'PriceDate'、インプレース= true)を '。 – jezrael

+0

ありがとうございます、今はうまくいきます! – User456898

関連する問題