J'ai ces ensembles de données et cette boucle:

df1 = np.array([[91,9], [22,78]])
df2 = np.array([[99,1], [21,79]])
df3 = np.array([[96,4], [10,90]])
df4 = np.array([[98,2], [18,82]])

dfs = [df1, df2, df3, df4]
for i in dfs:
    tpr = i[1,1] / (i[1,0] + i[1,1])
    print('tpr: ', tpr)

Et la sortie est:

tpr:  0.78
tpr:  0.79
tpr:  0.9
tpr:  0.82

Comment obtenir une sortie comme celle-ci?

df1 -- tpr:  0.78
df2 -- tpr:  0.79
df3 -- tpr:  0.9
df4 -- tpr:  0.82

Le principal problème est que j'ai besoin du nom du tableau à imprimer. J'ai regardé quelques autres réponses (problèmes différents) et essayé celles-ci, mais je n'arrive pas à les faire fonctionner. Par exemple [i] et d'autres choses dans l'instruction print pour essayer d'obtenir le nom.

Par exemple. Comment imprimer la liste dans 'for 'boucle en utilisant .format () en Python?, mais le problème est différent et ne semble pas s'appliquer.

0
william3031 22 mai 2020 à 05:55

2 réponses

Meilleure réponse

Le mieux est probablement d'utiliser un dictionnaire pour stocker vos tableaux.

dfs = {'df1': df1, 'df2': df2, 'df3': df3, 'df4': df4}

Ensuite, vous pouvez parcourir les clés pour obtenir leurs noms, puis indexer le dictionnaire pour leurs valeurs.

for i in dfs.keys():
    val = dfs[i]
    tpr = val[1,1] / (val[1,0] + val[1,1])
    print(i, '-- tpr: ', tpr)

Vous pouvez également installer varname et obtenir les noms avec varname.nameof().

2
duckboycool 22 mai 2020 à 03:02

Vous pouvez récupérer le nom de la variable à partir des globaux

import numpy as np

df1 = np.array([[91,9], [22,78]])
df2 = np.array([[99,1], [21,79]])
df3 = np.array([[96,4], [10,90]])
df4 = np.array([[98,2], [18,82]])

dfs = [df1, df2, df3, df4]
for i, df in enumerate(dfs):
    tpr = df[1,1] / (df[1,0] + df[1,1])
    # Use generator to find name of current df in global names table
    name = next(x for x in globals() if globals()[x] is df)
    print(f'{name} -- tpr: {tpr}')

Sortie

df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82
2
DarrylG 22 mai 2020 à 03:15