iteritems() Механизм вывода DateFrame и выход append() в новый DataFrame
Хорошо, достаточно, достаточно. Мне нужна помощь с процедурой iteritems() и append()...
Здесь у нас есть данные по временным рядам для бочек пива и виски...
Beer Whiskey
Date
1978-12-29 22.60 86.50
1979-01-02 22.68 86.52
1979-01-03 21.86 87.41
1979-01-04 22.32 87.54
1979-01-05 22.55 87.49
1979-01-08 22.31 87.21
1979-01-09 22.40 87.61
1979-01-10 22.07 87.64
1979-01-11 22.07 88.12
1979-01-12 21.76 88.04
То, что я пытаюсь сделать, это создать скользящие 5-дневные возвращаемые значения из этих данных. Я использую функцию iteritems() и получаю правильные числа. Первая часть, которую я не понимаю, - почему эта функция повторяет вывод столько раз, сколько столбцов в DataFrame (минус индекс). Это код и вывод...
for value in test.iteritems():
print(((test - test.shift(5))*100)/test.shift(5))
ВЫХОД
Beer Whiskey
Date
1978-12-29 NaN NaN
1979-01-02 NaN NaN
1979-01-03 NaN NaN
1979-01-04 NaN NaN
1979-01-05 NaN NaN
1979-01-08 -1.283186 0.820809
1979-01-09 -1.234568 1.259824
1979-01-10 0.960659 0.263128
1979-01-11 -1.120072 0.662554
1979-01-12 -3.503326 0.628643
Beer Whiskey
Date
1978-12-29 NaN NaN
1979-01-02 NaN NaN
1979-01-03 NaN NaN
1979-01-04 NaN NaN
1979-01-05 NaN NaN
1979-01-08 -1.283186 0.820809
1979-01-09 -1.234568 1.259824
1979-01-10 0.960659 0.263128
1979-01-11 -1.120072 0.662554
1979-01-12 -3.503326 0.628643
Есть идеи, почему этот точный вывод повторяется?
ДАЛЕЕ, я создаю новый DataFrame и прошу (очень приятно!) Добавить этот вывод в dataframe. Вот код...
for value in test.iteritems():
df.append(((test - test.shift(5))*100)/test.shift(5))
Это ошибка, которую я получаю...
TypeError Traceback (most recent call last)
<ipython-input-133-006bdc416056> in <module>()
1 for value in test.iteritems():
----> 2 df.append(((test - test.shift(5))*100)/test.shift(5))
TypeError: append() missing 1 required positional argument: 'other'
Мое исследование говорит, что эта "другая" ошибка типа возникает, когда в коде отсутствует ссылка. Я пробовал разные комбинации "ключ, значение" безрезультатно. Кроме того, у функции печати, похоже, нет проблем. Пожалуйста, дайте мне знать, если у вас есть идеи. заранее спасибо
1 ответ
pandas.iteritems
перебирает пары вида name, column
(series
чтобы быть более точным), вы можете проверить это, посмотрев на этот пример
for value in test.iteritems():
print(value[0])
Это выводы
Beer
Whiskey
Вот почему вы видите несколько выходов одного кадра. Простое решение вашей проблемы
returns = 100 * test.diff(5) / test.shift(5)
print(returns)
Beer Whiskey
Date
1978-12-29 NaN NaN
1979-01-02 NaN NaN
1979-01-03 NaN NaN
1979-01-04 NaN NaN
1979-01-05 NaN NaN
1979-01-08 -1.283186 0.820809
1979-01-09 -1.234568 1.259824
1979-01-10 0.960659 0.263128
1979-01-11 -1.120072 0.662554
1979-01-12 -3.503326 0.628643