2017-05-27 7 views
0

Numpy Arrayを更新するためにforループを使用していますが、動作していないようです。私は間違って何をしていますか?Python - Looping Issue

私のコード

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]) 

第一Printコマンドのシーケンス

411.410004 
6.01959029389 
6.01959029389 

で3印刷コマンドの私の出力は、それは私に正しい値を示しています。 しかし、次の2のためにPrintコマンドはなぜ同じ値を示していますか?私はdic_1を更新するだけで、dicは更新しません。私は間違って何をしていますか?

+3

名前は同じオブジェクトです。 dic_1を更新する場合は、dicも更新しています。代わりに、コピーを作成する必要があります。それらが不変オブジェクトを保持している場合は、 'dic_1 = dic.copy()'が動作するはずです。 – ayhan

+0

はそれを試みたが、私に「DIC_1 = DIC」私は使用 だから私のコードで –

答えて

1

あなたは:同じ辞書に

dict1 = dict(a=1) 
dict2 = dict1 

dict1とdict2ポイントの両方。名前は異なりますが、両方の名前が同じデータ構造を参照しています。あなたはdict2がdict1のコピーになりたい場合は、明示的にコピーします

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

:それは意味

dict2 = dict1.copy() 

ああ、そしてあなたの辞書の要素自体がまた辞書ですので、あなたが必要です詳細コピーを作成する:

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

の代わり 前と同じ結果が得られる 「DIC_1 = dic.copy()」 しかし、私に私の答えを編集したときと同じ結果 –

+0

を与え、 @ayhanのおかげです。 –