m0_56968097 2022-11-13 10:41 采纳率: 100%
浏览 132
已结题

python中if,elif,else循环遇到问题,不知如何解决

Python中想要利用一个方程计算1-12月各个月份的热扩散值,但是现只会分别计算2月份和其他除2月外月份的值,这是我分别计算的代码,是可以正常运行的,先放上数据格式

img

下面是我计算1、3-12月的代码

[]([](

import pandas as pd
import numpy as np

csv=pd.read_csv("C:\\Users\86139\Desktop/NADORS.csv",header=0,encoding="unicode_escape")
csv= csv.values
year=np.array(csv[:, 0])
month=np.array(csv[:, 1])
day=np.array(csv[:, 2])
tem20=np.array(csv[:, 3])
tem50=np.array(csv[:, 4])
tem100=np.array(csv[:, 5])
tem200=np.array(csv[:, 6])

dep=[0.2,0.5,1.0,2.0] 
d2050=[] 
d50100=[] 
d100200=[] 
years=np.arange(2010,2017)
years1=[2010,2011,2013,2014,2015]
years2=[2012,2016]
months=np.arange(1,13)
days=np.arange(1,32)
a=[1,3,5,7,8,10,12]
b=[4,6,9,11]
c=[2]

years

for i in years: 
    for j in range(1,13): 
        temm20=[]
        temm50=[] 
        temm100=[] 
        temm200=[]
        if j in a :
            for k in range(1,32):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))
        if j in b:
            for k in range(1,31):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))

frame2={'d20-50':d2050,'d50-100':d50100,'d100-200':d100200} 
dataframe2=pd.DataFrame(frame2)
dataframe2
dataframe2.to_csv("C:\\Users\\86139\\Desktop/NADORSdataframeWITHOUT2.csv")
```))

下面是我计算2月份的代码后边的计算部分
```python
for i in years: 
    for j in c: 
        temm20=[]
        temm50=[] 
        temm100=[] 
        temm200=[] 
        if i in years1 :
            for k in range(1,29):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))
        if i in years2:
            for k in range(1,30):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))

frame3={'d20-50':d2050,'d50-100':d50100,'d100-200':d100200} 
dataframe3=pd.DataFrame(frame3)
dataframe3
dataframe3.to_csv("C:\\Users\\86139\\Desktop/newNADORSdataframe2.csv")

下面是我想结合到一起写的代码,前面是一致的,后边计算的部分我改成了如下

for i in years: 
    for j in range(1,13): 
        temm20=[]
        temm50=[] 
        temm100=[] 
        temm200=[]
        if j in a :
            for k in range(1,32):
               temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))
        elif j in b:
            for k in range(1,31):
               temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))
        else:
            for k in range(1,29):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))
            for k in range(1,30):
                temm20.append(np.mean(tem20[np.where((year==i)&(month==j)&(day==k))])) 
                temm50.append(np.mean(tem50[np.where((year==i)&(month==j)&(day==k))])) 
                temm100.append(np.mean(tem100[np.where((year==i)&(month==j)&(day==k))])) 
                temm200.append(np.mean(tem200[np.where((year==i)&(month==j)&(day==k))]))
            d2050.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm50)-np.min(temm50))/(np.max(temm20)-np.min(temm20)))/(-1)/(dep[1]-dep[0]))**2)*(10**6)) 
            d50100.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm100)-np.min(temm100))/(np.max(temm50)-np.min(temm50)))/(-1)/(dep[2]-dep[1]))**2)*(10**6)) 
            d100200.append((2*np.pi/86400./365.)/2./((np.log((np.max(temm200)-np.min(temm200))/(np.max(temm100)-np.min(temm100)))/(-1)/(dep[3]-dep[2]))**2)*(10**6))

frame2={'d20-50':d2050,'d50-100':d50100,'d100-200':d100200} 
dataframe2=pd.DataFrame(frame2)
dataframe2
dataframe2.to_csv("C:\\Users\\86139\\Desktop/123NADORSdataframe.csv")

倒是可以运行出来 但运行结果显示如下

img


正确结果应如

img


想请问问题究竟出在哪里呢?若能得到解答,感激不尽

  • 写回答

7条回答 默认 最新

  • aabond 2022-11-13 11:09
    关注

    结合的代码,在计算2月时,没有根据年份判断是否是有闰月的年份,少加了条件. 应该是少了 两个if判断

    if i in years1:
      for k in range(1,29):
          pass
    if i in years2:
      for k in range(1,30):
          pass
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 11月21日
  • 已采纳回答 11月13日
  • 创建了问题 11月13日

悬赏问题

  • ¥15 wincc已组态的变量过多
  • ¥60 如图:直线与椭圆X轴平行,求直线与椭圆任意一点的相切坐标计算公式
  • ¥50 如何用python使用opencv里的cv::cudacodec::VideoWriter函数对视频进行GPU硬编码
  • ¥100 c#solidworks 二次开发 工程图自动标边线法兰 等折弯尺寸怎么标
  • ¥15 halcon DrawRegion 提示错误
  • ¥15 FastAPI Uvicorn启动显示404
  • ¥15 centos7.9脚本,怎么排除特定的访问记录
  • ¥15 关于#Django#的问题:我的静态文件呢?
  • ¥15 关于CPLEX的问题,请专家解答
  • ¥15 cocos的点击事件 怎么穿透到 原生fragment上。