2017-05-27 76 views
0

我正在使用for循环来更新Numpy数组,但它似乎没有工作。我究竟做错了什么?Python - 循环问题

我的代码

import pandas as pd 
import pandas_datareader as pdr 
import datetime as dt 
from dateutil.relativedelta import relativedelta 
import matplotlib.finance as mf 
import numpy as np 
import scipy as sp 

def pull_price(ticker): 

    df = pd.read_csv(ticker+'.csv') 
    df1=np.array(df['Adj Close']) 
    return df1 




tickers=['^DJI','^GSPC','^IXIC','^GDAXI','^HSI','^FCHI','^N225'] 

dic={} 

for i in tickers: 
    dic[i]=pull_price(i) 


for i in tickers: 
    count = len(dic[i]) 
    for j in range(0,count): 
     try: 
      dic[i][j] = float(dic[i][j]) 
     except ValueError: 
      dic[i][j] = float(dic[i][j-1]) 

dic_1= dic 
print(dic['^GSPC'][0]) 

for i in tickers: 
    count = len(dic_1[i]) 
    for j in range(0,count): 
     dic_1[i][j] = np.log(dic_1[i][j]) 

print(dic_1['^GSPC'][0]) 
print(dic['^GSPC'][0]) 

我对3打印命令的输出顺序

411.410004 
6.01959029389 
6.01959029389 

为第1 Print命令它显示我正确的值。 但是对于接下来的2 Print命令为什么显示相同的值。我只更新dic_1而不是dic。我究竟做错了什么?

+3

它们是具有不同名称的相同对象。如果您正在更新dic_1,那么您也正在更新dic。相反,你需要创建一个副本。如果他们持有不可变的对象,'dic_1 = dic.copy()'应该可以工作。 – ayhan

+0

试过,但给了我同样的结果 –

回答

1

当你这样做:

dict1 = dict(a=1) 
dict2 = dict1 

两个dict1和dict2指向相同的字典。名称不同,但两个名称均指相同的数据结构。这意味着:

dict2['a'] = 2 
print(dict1) 
{'a': 2} 

如果你想dict2是dict1的副本,明确使它成为一个副本:

dict2 = dict1.copy() 

啊,因为你的字典中的元素本身也是字典,你需要进行深度复制:

import deepcopy 
dict2 = deepcopy.copy(dict1) 
+0

所以在我的代码,而不是 之前 我用“DIC_1 = DIC” “DIC_1 = dic.copy()” 但让我编辑我的回答同样的结果 –

+0

,还要感谢@ayhan。 –