命名一个数据框、一个输出和一个图表在一个循环中。

huangapple go评论62阅读模式
英文:

naming a dataframe, an output and a figure in a loop

问题

TypeError: 'set' object is not subscriptable
英文:

I'm trying to compute dataframes, plot then and save them in the same loop but I have a hard time naming them in a proper manner.

I tried :

df_jour = [janvier_jour, fevrier_jour, mars_jour, avril_jour, mai_jour, juin_jour, juillet_jour, aout_jour, septembre_jour, octobre_jour, novembre_jour, decembre_jour]
df_nuit = [janvier_nuit, fevrier_nuit, mars_nuit, avril_nuit, mai_nuit, juin_nuit, juillet_nuit, aout_nuit, septembre_nuit, octobre_nuit, novembre_nuit, decembre_nuit]
NAME_jour = {"en janvier de jour", "en février de jour", "en mars de jour", "en avril de jour", "en mai de jour", "en juin de jour", "en juillet de jour", "en août de jour", "en septembre de jour", "en octobre de jour", "en novembre de jour", "en décembre de jour"}
NAME_nuit = {"en janvier de nuit", "en février de nuit", "en mars de nuit", "en avril de nuit", "en mai de nuit", "en juin de nuit", "en juillet de nuit", "en août de nuit", "en septembre de nuit", "en octobre de nuit", "en novembre de nuit", "en décembre de nuit"}

for df in df_jour: 
    df_clean = df.drop(columns = ["Moyennes", "Medianes", "écart-type"], axis=1).mean(axis=0).values
    print(df_clean)
    carte = np.reshape(df_clean, (8, 19))
    
    for name in NAME_jour:
        print(name)
        #plot
        ax = plt.imshow(carte, cmap='plasma')
        plt.title("Température moyenne {NAME_jour}".format(name))
        #légende
        cbar = plt.colorbar(location="bottom", label ="température en kelvin", fraction = 0.10)

        #grille
        plt.grid(False)
            
        #Sauvegarde de la figure en sortie
        plt.savefig('/mnt/Data/30_Stages_Encours/2023/ZonesHumides_Sarah/donnee_traitee/thermique/cartes/MOD{}.png').format(i)
        

One df looks like this :

[      nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
       nan       nan       nan       nan       nan       nan       nan
 281.93066 281.93066 281.9625  281.9625        nan       nan       nan
       nan       nan       nan       nan       nan       nan 282.25616
       nan       nan 282.13797 282.13797 282.0449  282.0405  282.0405
 282.16513 282.18546 282.18546       nan       nan       nan       nan
 282.16705 282.0923        nan       nan 282.26132 282.12674 282.12674
       nan       nan 282.2211  282.21896 282.21896 282.43152 282.51382
 282.51382 282.46732 282.46732       nan       nan       nan       nan
 282.03323 282.03323 282.1428  282.3119  282.3119  282.31226 282.31226
 282.32877 282.38373 282.38373 282.69778 282.70245 282.70245 282.56158
 282.56158 282.46973       nan       nan       nan       nan       nan
 282.41928 282.58136 282.58136 282.75327 282.6079  282.6079  282.47507
 282.47507 282.69797 282.89523 282.89523 282.8569  282.7391        nan
       nan       nan       nan       nan       nan       nan 282.71594
 282.71594 282.8112  282.74515 282.74515 282.64297 282.64297       nan
 282.9823  282.9823        nan       nan       nan]

This got me a key error..

I want my titles and outputs to be from the NAME_jour list with the same index as my dataframes. This won't work also because it's going to be named with the last element of the list.
I tried to do everything in the same loop with enumerate but can't figure out how to enumerate with something else then 0,1,2,3...

I tried :

df_jour = [janvier_jour, fevrier_jour, mars_jour, avril_jour, mai_jour, juin_jour, juillet_jour, aout_jour, septembre_jour, octobre_jour, novembre_jour, decembre_jour]
df_nuit = [janvier_nuit, fevrier_nuit, mars_nuit, avril_nuit, mai_nuit, juin_nuit, juillet_nuit, aout_nuit, septembre_nuit, octobre_nuit, novembre_nuit, decembre_nuit]
NAME_jour = {"en janvier de jour", "en février de jour", "en mars de jour", "en avril de jour", "en mai de jour", "en juin de jour", "en juillet de jour", "en août de jour", "en septembre de jour", "en octobre de jour", "en novembre de jour", "en décembre de jour"}
NAME_nuit = {"en janvier de nuit", "en février de nuit", "en mars de nuit", "en avril de nuit", "en mai de nuit", "en juin de nuit", "en juillet de nuit", "en août de nuit", "en septembre de nuit", "en octobre de nuit", "en novembre de nuit", "en décembre de nuit"}

for i,df in enumerate(df_jour): 
    df_clean = df.drop(columns = ["Moyennes", "Medianes", "écart-type"], axis=1).mean(axis=0).values
    carte = np.reshape(df_clean, (8, 19))

    #vide le plot
    plt.clf()
    #plot
    ax = plt.imshow(carte, cmap='plasma')
    plt.title("Température moyenne " + str(NAME_jour[i]))
    #légende
    cbar = plt.colorbar(location="bottom", label ="température en kelvin", fraction = 0.10)

    #grille
    plt.grid(False)
        
    #Sauvegarde de la figure en sortie
    path = '/mnt/Data/30_Stages_Encours/2023/ZonesHumides_Sarah/donnee_traitee/thermique/cartes/MOD' + str(NAME_jour[i]) + '.png'
    plt.savefig(path)

but I got this error on this line " plt.title("Température moyenne " + str(NAME_jour[i]))"
:

TypeError: 'set' object is not subscriptable

答案1

得分: 0

这部分的代码是用来生成一系列温度分布的图片,包括白天和夜晚的。我将不会翻译代码,只提供代码中的注释和文字描述的翻译。

  1. df_jour 是白天的温度数据,df_nuit 是夜晚的温度数据。
  2. NAME_jour 包含白天月份的名称,NAME_nuit 包含夜晚月份的名称。
  3. 循环遍历月份数据,并生成相应的温度分布图像。
  4. 图像保存在指定路径下,路径中包含了月份的名称。

如果你需要更多帮助或有其他问题,请随时提出。

英文:

This worked out fine :

df_jour = [janvier_jour, fevrier_jour, mars_jour, avril_jour, mai_jour, juin_jour, juillet_jour, aout_jour, septembre_jour, octobre_jour, novembre_jour, decembre_jour]
df_nuit = [janvier_nuit, fevrier_nuit, mars_nuit, avril_nuit, mai_nuit, juin_nuit, juillet_nuit, aout_nuit, septembre_nuit, octobre_nuit, novembre_nuit, decembre_nuit]
NAME_jour = ["en janvier de jour", "en février de jour", "en mars de jour", "en avril de jour", "en mai de jour", "en juin de jour", "en juillet de jour", "en août de jour", "en septembre de jour", "en octobre de jour", "en novembre de jour", "en décembre de jour"]
NAME_nuit = ["en janvier de nuit", "en février de nuit", "en mars de nuit", "en avril de nuit", "en mai de nuit", "en juin de nuit", "en juillet de nuit", "en août de nuit", "en septembre de nuit", "en octobre de nuit", "en novembre de nuit", "en décembre de nuit"]

for i,df in enumerate(df_jour): 
    df_clean = df.drop(columns = ["Moyennes", "Medianes", "écart-type"], axis=1).mean(axis=0).values
    carte = np.reshape(df_clean, (8, 19))

    #vide le plot
    plt.clf()
    #plot
    ax = plt.imshow(carte, cmap='plasma')
    plt.title("Température moyenne " + str(NAME_jour[i]))
    #légende
    cbar = plt.colorbar(location="bottom", label ="température en kelvin", fraction = 0.10)

    #grille
    plt.grid(False)
        
    #Sauvegarde de la figure en sortie
    path = '/mnt/Data/30_Stages_Encours/2023/ZonesHumides_Sarah/donnee_traitee/thermique/cartes/MOD' + str(NAME_jour[i]) + '.png'
    plt.savefig(path)

huangapple
  • 本文由 发表于 2023年5月22日 19:54:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/76305917.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定