【问题标题】:Python - Looping IssuePython - 循环问题
【发布时间】:2017-05-27 13:56:34
【问题描述】:

我正在使用 for 循环来更新 Numpy 数组,但它似乎不起作用。我做错了什么?

我的代码

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

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

【问题讨论】:

  • 它们是同一个对象,但名称不同。如果您正在更新 dic_1,那么您也在更新 dic。相反,您需要创建一个副本。如果他们持有不可变对象,dic_1 = dic.copy() 应该可以工作。
  • 试过了,但结果和以前一样

标签: python pandas numpy for-loop


【解决方案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)

【讨论】:

  • 所以在我的代码中,我使用了 'dic_1= dic.copy()' 而不是 'dic_1= dic' 但结果相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多