2

次のコマンドでrollng_meanを計算すると、欠落している値がたくさんあります。

import datetime as dt
import pandas as pd
import pandas.io.data as web

stocklist = ['MSFT', 'BELG.BR']

# read historical prices for last 11 years
def get_px(stock, start):
    return web.get_data_yahoo(stock, start)['Adj Close']

today = dt.date.today()
start = str(dt.date(today.year-11, today.month, today.day))

px = pd.DataFrame({n: get_px(n, start) for n in stocklist})
px.ffill()
sma200 = pd.rolling_mean(px, 200)

次の結果が得られました:

In [14]: px
Out[14]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2836 entries, 2002-01-14 00:00:00 to 2013-01-11 00:00:00
Data columns:
BELG.BR    2270  non-null values
MSFT       2769  non-null values
dtypes: float64(2)

In [15]: sma200
Out[15]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2836 entries, 2002-01-14 00:00:00 to 2013-01-11 00:00:00
Data columns:
BELG.BR    689  non-null values
MSFT       400  non-null values
dtypes: float64(2)

sma200のrolling_mean値のほとんどが欠落している理由と、完全なリストを取得する方法について何か考えはありますか?

4

2 に答える 2

3

px.ffill()新しいを返しますDataFramepx自分自身を変更するには、を使用しますinplace = True

px.ffill(inplace = True)
sma200 = pd.rolling_mean(px, 200)
print(sma200)

収量

Data columns:
BELG.BR    2085  non-null values
MSFT       2635  non-null values
dtypes: float64(2)
于 2013-01-14T22:29:12.053 に答える
2

を印刷sma200すると、おそらく多くのnull値または欠落値が見つかります。これは、null以外の数のしきい値がデフォルトで高いためrolling_meanです。

使ってみてください

sma200 = pd.rolling_mean(px, 200, min_periods=2)

パンダのドキュメントから:

min_periods:必要なnull以外のデータポイントのしきい値(それ以外の場合、結果はNAです)

データセットに多くのポイントがない場合は、ウィンドウのサイズを変更してみることもできます。

于 2013-01-14T22:17:57.237 に答える