使用循环将单个数据帧存储在列表中 Python
Storing individual dataframes in a list using a loop Python
我需要将 10 个数据帧存储到一个列表中。数据帧是函数的输出。
问题是列表与最后一个数据框保持一致。例如,resultlist[0] 假设是 01-Feb-2020 的数据框。但是列表中的每个数据框都是 10-Feb-2020 的输出。
resultList = [None]*10
for i in range(0,10):
resultList[i]= getResultfunction(id,listDates[i])
据我所知,您提供的代码片段是正确的。只需知道您为每个 getResultfunction 调用提供了相同的 id 参数。
你能展示 getResult 函数的实现吗?问题可能在那里。那个或你的 listDates 列表包含错误的日期。
编辑 1
好吧,问题可能是您只是在列表中存储对同一数据框的引用。如果您不熟悉编程语言如何存储引用和值,我建议您查看此 link https://blog.penjee.com/passing-by-value-vs-by-reference-java-graphical/ 或只是 google 它,因为它是编程语言的基本范例.
所以基本上,每次调用 getResultfunction
时,您都会获得对同一模板的引用,然后更改此模板,然后 return 会引用该模板。下次调用该函数时,您将访问相同的(更改后的)模板,再次更改它,然后 return 对其进行新引用。然后该列表存储大量对 相同对象!
的引用
在这种特殊情况下,每次调用 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
我需要将 10 个数据帧存储到一个列表中。数据帧是函数的输出。 问题是列表与最后一个数据框保持一致。例如,resultlist[0] 假设是 01-Feb-2020 的数据框。但是列表中的每个数据框都是 10-Feb-2020 的输出。
resultList = [None]*10
for i in range(0,10):
resultList[i]= getResultfunction(id,listDates[i])
据我所知,您提供的代码片段是正确的。只需知道您为每个 getResultfunction 调用提供了相同的 id 参数。 你能展示 getResult 函数的实现吗?问题可能在那里。那个或你的 listDates 列表包含错误的日期。
编辑 1 好吧,问题可能是您只是在列表中存储对同一数据框的引用。如果您不熟悉编程语言如何存储引用和值,我建议您查看此 link https://blog.penjee.com/passing-by-value-vs-by-reference-java-graphical/ 或只是 google 它,因为它是编程语言的基本范例.
所以基本上,每次调用 getResultfunction
时,您都会获得对同一模板的引用,然后更改此模板,然后 return 会引用该模板。下次调用该函数时,您将访问相同的(更改后的)模板,再次更改它,然后 return 对其进行新引用。然后该列表存储大量对 相同对象!
在这种特殊情况下,每次调用 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