Как получить определенный ответ вместо NAN в Python? - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужна помощь, чтобы понять вывод этого кода.Почему я получаю Nan вместо значения float?Пожалуйста, предложите необходимые поправки:

import matplotlib.pyplot as plt
from scipy import stats
import pandas as pd
import fix_yahoo_finance as fyf
from pandas_datareader import data as pdr
import numpy as np
fyf.pdr_override()
p=pdr.get_data_yahoo('IBM',start ='2009-01-01',end ='2013-01-01')
p.to_csv('YF_IBM_2009_2013.csv')
print(p.head())
ret = (p.Close[1:]-p.Close[:-1])/p.Close[1:]
print ('ticker=','IBM','W-test, and P-value')
print (stats.shapiro(ret))

И вывод:

ret = (p.Close[1:]-p.Close[:-1])/p.Close[1:]

print ('ticker=','IBM','W-test, and P-value')

print (stats.shapiro(ret))

ticker= IBM W-test, and P-value

(nan, 1.0)

1 Ответ

0 голосов
/ 14 ноября 2018

Есть небольшая проблема с вашим кодом. Когда вы напрямую вычитаете две серии панд, появляется индекс. Ниже вывод для

p.Close[1:]

enter image description here

Наличие индекса вместе со значениями - это причина, по которой вы получаете значения Nan. Чтобы выбрать только значения из серии панд, вам нужно сделать

p.Close[1:].values

так что теперь строка ret =

ret = ((p.Close[1:].values-p.Close[:-1].values)/(p.Close[1:].values))

Это должно сделать то, что вы ищете. Прокомментируйте, если что-то еще нужно.

...