индексы списка должны быть целыми числами или ломтиками, а не str.x - PullRequest
0 голосов
/ 16 мая 2018

У меня появляется сообщение об ошибке, когда я пытаюсь вычислить скользящее среднее значение с помощью панд. Ошибка:

list indices must be integers or slices, not str

Не могу понять, как ее решить.Кто-нибудь может подсказать?Спасибо.

for file in filename_day:
    df = pd.read_csv(path_day + file)
    Data_length=len(df)-1
    ma_data=[]
    ma_list=[5,10,20,30,60]
    for ma in ma_list:
        ma_data['MA_' + str(ma)] = pd.rolling_mean(df['close'], window=ma)
        print(ma_data)
    df.to_csv('C:/20180424_DD/MA/'+file)

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Как сказал Акшат, ошибка в этом ряду.Если вы хотите list вместо dictionary, измените код следующим образом:

for ma in ma_list:
    df['MA_' + str(ma)] = pd.rolling_mean(df['close'], window=ma)
    ma_data.append(df['MA_' + str(ma)])

В общем случае pd.rolling_mean устарело.Вы можете использовать:

df['MA_' + str(ma)] = df['close'].rolling(window=ma).mean()

.

0 голосов
/ 16 мая 2018

В этой строке выдается ошибка:

ma_data['MA_' + str(ma)] = pd.rolling_mean(df['close'], window=ma)

Как вы уже объявили ma_data как list -> ma_data=[]. Но в приведенном выше коде вы пытаетесь создать key как 'MA_' + str(ma) в ma_data, то есть list.

Здесь вам нужен словарь:

ma_data = {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...