필자는 본질적으로 열의 일부를 열로 또는 그 반대로 조 변경해야하는 기후 데이터 시트를 보급했습니다. 불행히도 형식은 다소 어색합니다. 그 데이터는 년, 월, 날의 날 수, 행의 기후 데이터 유형, 그리고 매일 값을 나타내는 연속적인 93 개의 열이 성공하고 관련 플래그가 붙어서 나에게 나왔습니다 (그래서 3 개월, 가치 및 2 플래그, 매일 각 달). 달의 길이는 다양하지만 마지막 몇 열에서는 더 짧은 달이 널 값으로 채워집니다. 내가 원하는 것은 처리 및 모델링 목적으로 다음과 같은 열이 포함 된 스프레드 시트/.csv 파일입니다.연속적인 yrs에서 연속적인 개월의 행 데이터를 호출하고이를 컬럼에 기록 하시겠습니까?
년, 월, 일 (예 : 숫자 1 - 31) 및 다음 유형의 기후 데이터 (강우량, 눈, 설수, tmax, tmin).
적절한 플래그 값이있는 열을 얻을 수도 있다면 좋겠지 만 우선 순위는 아닙니다. 그래서 행의 위치를 기반으로 연도, 월, 기후 변수 유형, 변수 값, flag1 및 flag2를 나타내는 행을 목록에 압축을 풀기위한 코드를 작성했습니다 (아마도 매우 비효율적이지만 아마도이 점에서 새로운 것입니다). (1 ~ 31, 일에 해당) :
import matplotlib.mlab as mlab
from matplotlib.pyplot import figure, show
import numpy as np
import scipy
import csv
durham='C:\\Users\\LocalUser\\Desktop\\Drought Data\\My_Met_Data\\USHCN\\Durham.csv'
txt='met'
station='Durham'
output=station+"_"+txt+"_"+"new"+".csv"
infile=open(durham,'r')
outfile=open(output,'w')
writer=csv.writer(outfile)
yr=[]; mon=[]; var=[]; unit=[]; flag1= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];\
flag2=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];\
value=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];\
valu=[]; flg1=[]; flg2=[]; prcp=[]; snow=[]; snwd=[]; tmax=[]; tmin=[]; row=[]
for line in infile:
stationid, variable, units, year, month, days, flag1[0], value[0], flag2[0], flag1[1], value[1], flag2[1], flag1[2], value[2], flag2[2],\
flag1[3], value[3], flag2[3], flag1[4], value[4], flag2[4], flag1[5], value[5], flag2[5], flag1[6], value[6], flag2[6],\
flag1[7], value[7], flag2[7], flag1[8], value[8], flag2[8] ,flag1[9], value[9], flag2[9], flag1[10], value[10], flag2[10],\
flag1[11], value[11], flag2[11], flag1[12], value[12], flag2[12], flag1[13], value[13], flag2[13], flag1[14], value[14], flag2[14],\
flag1[15], value[15], flag2[15], flag1[16], value[16], flag2[16], flag1[17], value[17], flag2[17], flag1[18], value[18], flag2[18],\
flag1[19], value[19], flag2[19], flag1[20], value[20], flag2[20], flag1[21], value[21], flag2[21], flag1[22], value[22], flag2[22],\
flag1[23], value[23], flag2[23], flag1[24], value[24], flag2[24], flag1[25], value[25], flag2[25], flag1[26], value[26], flag2[26],\
flag1[27], value[27], flag2[27], flag1[28], value[28], flag2[28], flag1[29], value[29], flag2[29], flag1[30], value[30], flag2[30]=line.split(',')
yr=[int(year)]
mon=[int(month)]
var=variable
unit=units
for yr in range(1926, 2003):
for mon in range(1,13):
if var=='PRCP':
valu=[float(i) for i in value]
flg1=[flag1]
flg2=[flag2]
for j in range(31):
prcp.append(valu[j])
elif var=='SNOW':
valu=[float(i) for i in value]
flg1=[flag1]
flg2=[flag2]
for j in range(31):
snow.append(valu[j])
elif var=='SNWD':
valu=[float(i) for i in value]
flg1=[flag1]
flg2=[flag2]
for j in range(31):
snwd.append(valu[j])
elif var=='TMAX':
valu=[float(i) for i in value]
flg1=[flag1]
flg2=[flag2]
for j in range(31):
tmax.append(valu[j])
elif var=='TMIN':
valu=[float(i) for i in value]
flg1=[flag1]
flg2=[flag2]
for j in range(31):
tmin.append(valu[j])
row=[yr, mon, j+1, prcp[j], snow[j], snwd[j], tmax[j], tmin[j]]
writer.writerow(row)
infile.close()
outfile.close()
을 지금, 나는이 프로그램을 실행할 때 나는 멀리 기후 변수의 몇 수강하면 그때 나는이 성공적으로 할 수, 메모리 오류가 있음을 옆으로 떠나 원하는 형식의 .csv 파일을 가져옵니다. 문제는 매달 1 년마다 (1926-2002 년) 동일한 기후 데이터 값, 즉 1926 년 1 월의 데이터를보고한다는 것입니다. 코드는 적절한 변수에서 데이터를 호출합니다. 적절한 날이지만 동일한 데이터가 한 달에 한 번 반복됩니다. 나는 이것으로 어디서 잘못되었는지 모르겠다. 그러나 어떤 제안/도움이라도 대단히 감사 할 것이다.
입력 예를 보여줄 수 있습니까? 또한 여기에 게시 한 코드가 제대로 들여 쓰기되어 있습니까? 나는 이상한 곳에서 몇 가지를 본다 ... – Avaris