在不修改原始数据的情况下使用克隆数组数据时出现问题 (Python)
Problem using cloned array data without modifying original (Python)
我有一个 Python 入门课程的项目要完成,但由于一个问题我快要结束了。
我的问题如下:
我想使用由 class 的不同属性值组成的双倍“tdata”数据框,称为“world”来对其进行更改。 (尝试用当前的指标水平做一些预测)
我试图通过生成一个新的数据框“graphdat”来做到这一点,我在函数中使用它来生成图形。
我的问题是,最后我的“tdata”数组也被修改了。
我尝试使用 graphdat = tdata.copy() ,但它 returns 一个 AttributeError : 'world' object has no attribute 'copy'.
有人知道我如何用另一种方式做到这一点吗?
谢谢!
def graph_ppm(self):
self.price_ppm = 10
self.budget -= self.price_ppm
period = tdata.period
graphdat = tdata
while period < 30:
period +=1
graphdat.sup = (graphdat.emit - graphdat.absorb)
graphdat.ppm += graphdat.sup
yppm.append(round(graphdat.ppm,2))
编辑:
我想我误解了整个问题。
正如 Md Imbesat Hassan Rizvi 所建议的,我决定使用 graphdat = copy.deepcopy(tdata) 但我想多次使用这个函数,我确实想重新初始化 graphdat到当前水平的参数和当前周期。
问题是,如果 运行 这个函数多次,我会得到这种图:
Graph
我的最大周期是 30,我想摆脱过去的值创建一个非常新的图表。
def graph_temp(self):
self.price_temp = 10
self.budget -= self.price_temp
graphdat = copy.deepcopy(tdata)
period = graphdat.period
plx.clear_plot()
while period < 30:
period +=1
graphdat.sup = (graphdat.emit - graphdat.absorb)
graphdat.ppm += graphdat.sup
if graphdat.ppm <380:
graphdat.temperature += graphdat.sup * 0.001
if graphdat.ppm <400:
graphdat.temperature += (graphdat.sup) * 0.001
if graphdat.ppm <450:
graphdat.temperature += (graphdat.sup) * 0.005
graphdat.pop_satisfaction -=1
else:
graphdat.temperature += (graphdat.sup) * 0.01
ytemp.append(round(graphdat.temperature,2))
limittemp = [2]*31
recomtemp = [1.5]*31
plx.plot(ytemp, label="Temperatures forecast",line_marker = "•")
plx.plot(limittemp, label="Catastrophe level",line_marker = "-")
plx.plot(recomtemp, label="Limit level after period 30",line_marker = "=")
plx.xlabel('Temperatures')
plx.ylabel('Period')
plx.title('Title')
plx.figsize(50, 25)
plx.ticks(31, 11)
return plx.show()
由于 tdata
似乎是自定义 class world
的实例,其复制属性不存在,您可以使用复制模块中的方法制作它的副本:
import copy
graphdat = copy.deepcopy(tdata)
从今以后,graphdat
和 tdata
将是 world
class.
的不同实例
我有一个 Python 入门课程的项目要完成,但由于一个问题我快要结束了。
我的问题如下: 我想使用由 class 的不同属性值组成的双倍“tdata”数据框,称为“world”来对其进行更改。 (尝试用当前的指标水平做一些预测) 我试图通过生成一个新的数据框“graphdat”来做到这一点,我在函数中使用它来生成图形。
我的问题是,最后我的“tdata”数组也被修改了。
我尝试使用 graphdat = tdata.copy() ,但它 returns 一个 AttributeError : 'world' object has no attribute 'copy'.
有人知道我如何用另一种方式做到这一点吗?
谢谢!
def graph_ppm(self):
self.price_ppm = 10
self.budget -= self.price_ppm
period = tdata.period
graphdat = tdata
while period < 30:
period +=1
graphdat.sup = (graphdat.emit - graphdat.absorb)
graphdat.ppm += graphdat.sup
yppm.append(round(graphdat.ppm,2))
编辑:
我想我误解了整个问题。 正如 Md Imbesat Hassan Rizvi 所建议的,我决定使用 graphdat = copy.deepcopy(tdata) 但我想多次使用这个函数,我确实想重新初始化 graphdat到当前水平的参数和当前周期。 问题是,如果 运行 这个函数多次,我会得到这种图:
Graph
我的最大周期是 30,我想摆脱过去的值创建一个非常新的图表。
def graph_temp(self):
self.price_temp = 10
self.budget -= self.price_temp
graphdat = copy.deepcopy(tdata)
period = graphdat.period
plx.clear_plot()
while period < 30:
period +=1
graphdat.sup = (graphdat.emit - graphdat.absorb)
graphdat.ppm += graphdat.sup
if graphdat.ppm <380:
graphdat.temperature += graphdat.sup * 0.001
if graphdat.ppm <400:
graphdat.temperature += (graphdat.sup) * 0.001
if graphdat.ppm <450:
graphdat.temperature += (graphdat.sup) * 0.005
graphdat.pop_satisfaction -=1
else:
graphdat.temperature += (graphdat.sup) * 0.01
ytemp.append(round(graphdat.temperature,2))
limittemp = [2]*31
recomtemp = [1.5]*31
plx.plot(ytemp, label="Temperatures forecast",line_marker = "•")
plx.plot(limittemp, label="Catastrophe level",line_marker = "-")
plx.plot(recomtemp, label="Limit level after period 30",line_marker = "=")
plx.xlabel('Temperatures')
plx.ylabel('Period')
plx.title('Title')
plx.figsize(50, 25)
plx.ticks(31, 11)
return plx.show()
由于 tdata
似乎是自定义 class world
的实例,其复制属性不存在,您可以使用复制模块中的方法制作它的副本:
import copy
graphdat = copy.deepcopy(tdata)
从今以后,graphdat
和 tdata
将是 world
class.