Сохранение отдельных кадров данных в списке, используя al oop Python - PullRequest
0 голосов
/ 16 апреля 2020

Мне нужно сохранить 10 кадров данных в списке. Кадры данных являются выходами функции. Проблема в том, что список остается таким же, как последний кадр данных. Например, список результатов [0] предположим, что он является фреймом данных 01 февраля 2020 года. Но каждый фрейм данных в списке - это результат 10 февраля 2020 года.

resultList = [None]*10

for i in range(0,10):    
    resultList[i]= getResultfunction(id,listDates[i])

1 Ответ

1 голос
/ 16 апреля 2020

Насколько я вижу, предоставленный вами фрагмент кода правильный. Просто знайте, что вы передаете один и тот же параметр id каждому вызову getResultfunction. Не могли бы вы показать реализацию функции getResult? Проблема, вероятно, там. Либо это, либо ваш список listDates содержит неправильные даты.

РЕДАКТИРОВАТЬ 1 Хорошо, поэтому проблема, вероятно, в том, что вы просто храните ссылки на один и тот же фрейм данных в списке. Если вы не знакомы с тем, как языки программирования хранят ссылки и значения, я бы посоветовал вам зайти по этой ссылке https://blog.penjee.com/passing-by-value-vs-by-reference-java-graphical/ или просто погуглить по ней, так как это фундаментальная парадигма языков программирования.

Таким образом, каждый раз, когда вы вызываете getResultfunction, вы получаете ссылку на один и тот же шаблон, затем вы изменяете этот шаблон и возвращаете ссылку на шаблон. При следующем вызове функции вы получите доступ к тому же (измененному) шаблону, снова измените его и вернете новую ссылку на него. Затем в списке хранится множество ссылок на один и тот же объект !

. В этом конкретном случае каждый вызов функции getResultfunction должен создавать новый объект. Я вижу 2 решения; Каждый раз, когда вы вызываете функцию getResult, вы:

  • просто копируете существующий шаблон, который генерирует новый идентичный объект:
def getResultfunction(id, date):
    p = template.copy()
    """other computations"""
    return p
  • создаете новый шаблон с нуля :
def getResultfunction(id, date):
    data = {...}
    df = pd.Dataframe(data)
    """"other computations"""
    return df
...