pandas 在循环中命名 Dataframe 、输出和图形

np8igboo  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(145)

我试图计算 Dataframe ,然后绘制并保存在同一个循环中,但我很难以正确的方式命名它们。
我试过:

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)

一个df看起来像这样:

[      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]

这给我带来了一个关键错误。
我希望我的标题和输出来自NAME_jour列表,与我的 Dataframe 具有相同的索引。这也不会起作用,因为它将以列表的最后一个元素命名。我试着用enumerate在同一个循环中做所有的事情,但不知道如何用其他东西枚举,然后是0,1,2,3...
我试过:

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)

但是我在这一行得到了这个错误“plt.title(“Température moyenne“+ str(NAME_jour[i])”:

TypeError: 'set' object is not subscriptable
nkcskrwz

nkcskrwz1#

这很好:

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)

相关问题