【问题标题】:Storing individual dataframes in a list using a loop Python使用循环 Python 将单个数据帧存储在列表中
【发布时间】:2020-04-16 12:06:03
【问题描述】:

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

resultList = [None]*10

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

【问题讨论】:

    标签: python data-structures data-storage


    【解决方案1】:

    据我所知,您提供的代码 sn-p 是正确的。只需知道您为每个 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
    

    【讨论】:

    • 嗨,Emilio 谢谢你的回答。我刚刚又检查了一遍。所以我手动完成了.. resultList[0]= getResultfunction(id,listDates[0]) resultList[1]= getResultfunction(id,listDates[1]) ... 最后一个数据框将覆盖列表中的每个项目。是否有另一种方法可以将单个数据帧存储在不同的数据结构中?
    • 这实际上取决于您在列表中存储的类型。您可能正在列表中存储对同一数据帧的引用,然后一遍又一遍地更改同一数据帧。能否提供getResult函数的代码?
    • 我正在将熊猫 df 存储到列表中。函数类似于: def getResultFucntion(id,date): p = template p.loc[0,1] = date p.loc[0,5] = id ... return p
    • 我编辑了我的帖子,我认为这应该可以解决您的问题 :)
    • 嘿emilio 谢谢你的帮助!问题已经解决了!! :)
    猜你喜欢
    • 2022-06-29
    • 2022-11-26
    • 1970-01-01
    • 2018-07-18
    • 2022-01-20
    • 1970-01-01
    • 2021-10-31
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多