2014-02-15 149 views
1

我正在閱讀三個獨立城市的數據,我想將每組數據保存在一個二維數組中,但是當我越過我的代碼的一部分時,循環不斷寫入來自我的前兩個城市的事情,因爲我只有一個一維數組。我應該在哪裏設置這些二維數組以保持我的文件的組織,以及我應該使用哪些函數和參數來實現?Python中的二維數組

陣列應該是3X54(3爲每個城市,54每年數據的)

編輯:所有在下面的代碼初始變量(即雨,TMIN,最高溫度)將在他們超過19,000元在開始時我最終每年在代碼中進行平均。

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

city = ['Lubbock.txt','Erie.txt','Oslo.txt'] 
years = np.arange(1960,2014,1) 
months_summer = range(5,8,1) 

for x in range(0,len(city),1): 

    data = np.genfromtxt(city[x], skip_header=2, usecols=(1), dtype=('S8')) 
    data2 = np.genfromtxt(city[x], skip_header=2, usecols=(2,3,4)) 

    #ONLY GET 1-D ARRAY WHEN I ASK FOR SHAPE OF VARIABLE AFTER THIS POINT 

    dates = pd.DatetimeIndex(data[:]) 
    year = dates.year 
    month = dates.month 
    day = dates.day 
    precip = data2[:,0]/10. 
    tmax = data2[:,1]/10. 
    tmin = data2[:,2]/10. 

    tmaxF = (tmax*(9./5.))+32. 
    tminF = (tmin*(9./5.))+32. 
    precipinches = precip*0.03937007874 

    tmax_avg = [] 

    JJA3tmax_avg = [] 

    JJAtmax_avg = [] 

    DJFtmax_avg = [] 

    for yr in years: 
     toavg = np.where(year == yr) 
     tmax_avg.append(np.average(tmax[toavg])) 


     for mo in months_summer: 
      sumtoavg = np.where(month == mo) 
      JJA3tmax_avg.append(np.average(tmax[sumtoavg])) 


     JJAtmax_avg.append(np.average(JJA3tmax_avg)) 
     JJA3tmax_avg = [] 

     dec_this_year = (year == yr) & (month == 12) 
     jan_next_year = (year == (yr+1)) & (month == 1) 
     feb_next_year = (year == (yr+1)) & (month == 2) 

     wintoavg = np.where(dec_this_year & jan_next_year & feb_next_year) 

     DJFtmax_avg.append(np.average(tmax[wintoavg])) 


    tmaxmean30 = np.average(tmax_avg[1:31]) 
    JJAtmaxmean30 = np.average(JJAtmax_avg[1:31]) 
    DJFtmaxmean30 = np.average(DJFtmax_avg[1:31]) 

#THIS IS THE DATA THAT I'M PLOTTING 
    tmax_avg_dep = tmax_avg - tmaxmean30 
    JJAtmax_avg_dep = JJAtmax_avg - JJAtmaxmean30 
    DJFtmax_avg_dep = DJFtmax_avg - DJFtmaxmean30 
+0

您正在導入'pandas',但您似乎並未真正使用它 - 尤其是,您似乎沒有利用'groupby'。 – DSM

+0

@DSM你有關於如何使用groupby函數的建議嗎?我不太瞭解熊貓,只是發現了將我的數據中的8位YYYYMMDD轉換爲字符串的函數。 – DJV

回答

5

這條線:

data[:] 

創建副本。你需要一個deep copy

import copy 
copy.deepcopy(data) 

從文檔:

淺及深拷貝之間的差異只爲複合對象(包含其他對象,如列表類的實例對象)相關:

  • 淺拷貝構造一個新的複合對象,然後(儘可能)將引用插入到原始對象中。
  • 深層副本構造一個新的複合對象,然後遞歸地將副本插入原始對象中的副本。
+0

然而,數據的大小並不是我最終需要我的數組的大小。那裏有超過19000個元素。 – DJV

+0

許多時候,如果將代碼燒寫爲[最小,完整,測試和可讀](http://stackoverflow.com/help/mcve),則很容易發現問題。否則,它是乾草堆裏的針。將其縮減爲顯示問題 – mhlester

+0

完成的最小代碼量。所有這些只是現在的一個變數。 – DJV