首页 > 解决方案 > 使用循环 Python 将单个数据帧存储在列表中

问题描述

我需要将 10 个数据帧存储到一个列表中。数据帧是函数的输出。问题是该列表与最后一个数据帧保持一致。例如,resultlist[0] 假设为 2020 年 2 月 1 日的数据框。但是列表中的每个数据框都是 2020 年 2 月 10 日的输出。

resultList = [None]*10

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

标签: pythondata-structuresdata-storage

解决方案


据我所知,您提供的代码片段是正确的。只需知道您为每个 getResultfunction 调用提供了相同的 id 参数。你能展示getResult函数的实现吗?问题可能就在那里。该列表或您的 listDates 列表包含错误的日期。

编辑 1 好的,所以问题可能是您只是在列表中存储对同一数据框的引用。如果您不熟悉编程语言如何存储引用和值,我建议您查看此链接https://blog.penjee.com/passing-by-value-vs-by-reference-java-graphical/或者只是谷歌它,因为它是编程语言的基本范式。

所以基本上,每次你调用getResultfunction,你都会得到一个对同一个模板的引用,然后你改变这个模板,并返回一个对模板的引用。下次调用该函数时,您将访问相同(更改的)模板,再次更改它,并返回对它的新引用。然后该列表存储对同一对象的大量引用!

在这种特殊情况下,每次调用 getResultfunction 都应该创建一个新对象。我看到了 2 个解决方案;每次调用 getResultfunction 时:

  • 只需复制现有模板,它会生成一个新的相同对象:
def getResultfunction(id, date):
    p = template.copy()
    """other computations"""
    return p
  • 从头开始创建一个新模板:
def getResultfunction(id, date):
    data = {...}
    df = pd.Dataframe(data)
    """"other computations"""
    return df

推荐阅读