Python - Панды, управляющие фреймами данных в циклах - PullRequest
0 голосов
/ 13 июня 2018

Я манипулирую данными с пандами и у меня возникают проблемы при использовании для циклов.

По сути, я имею дело с некоторыми временными рядами с ценами, и мне нужно рассчитать процентное изменение дневных цен;Мне нужно работать только с этими значениями и только за последние 750 дней.Скажем, у меня есть три фрейма данных, по одному для каждого продукта A, B и C, которые включают только дату и ежедневную цену.Я написал это:

import pandas as pd

products= [A, B, C]

for df in products:
    df["change"] = df["price"].pct_change()
    df.drop(index = [0], columns="price", inplace = True)
    df = df.iloc[-751:-1]

Теперь это работает правильно, за исключением последней строки в цикле for.Вместо того, чтобы перезаписывать исходный фрейм данных для A, B и C, он только изменяет фрейм данных, который в настоящее время находится под меткой df;это показано в списке переменных, где df - единственный фрейм данных с 750 строками, все остальные имеют то, что у них было изначально, за исключением одного отброшенного.Есть идеи, как это исправить?

На аналогичной заметке у меня есть вопрос об использовании памяти.Для таких вещей, скажем, я хочу запустить регрессию или провести некоторый анализ данных, что было бы лучше, хранить каждый продукт в отдельном фрейме данных или объединять их в один большой фрейм данных?А у panda есть функции в стиле регрессии, или лучше использовать какую-нибудь другую библиотеку, например numpy?

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете использовать функцию apply, которая работает лучше, чем любые циклы

def youfunction(args):
    return something

products = [A, B, C]

for df in products:
    df["change"] = df["price"].apply(yourfunction)

Обратите внимание, что лямбда-выражение не будет работатьздесь.

0 голосов
/ 13 июня 2018

вы можете попытаться поместить ваш фрейм данных в словарь:

import pandas as pd

products= {'A':A, 'B':B, 'C':C}

for k, v in products.items():
    products[k]["change"] = products[k]["price"].pct_change()
    products[k].drop(index = [0], columns="price", inplace = True)
    products[k] = products[k].iloc[-751:-1]

надеюсь, это поможет

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