我有这些数据集和这个循环:
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)
,输出为:
tpr: 0.78
tpr: 0.79
tpr: 0.9
tpr: 0.82
我将如何获得这样的输出?
df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82
主要问题是我需要打印的数组名称。我查看了其他一些答案(不同的问题)并尝试了这些,但无法正常工作。
例如,在打印语句中使用[i]
和其他内容来尝试获取名称。
例如How to print the list in 'for' loop using .format() in Python?,但问题有所不同,似乎并不适用。
答案 0 :(得分:2)
最好的办法是使用字典来存储数组。
dfs = {'df1': df1, 'df2': df2, 'df3': df3, 'df4': df4}
然后,您可以遍历键以获取其名称,然后为它们的值索引字典。
for i in dfs.keys():
val = dfs[i]
tpr = val[1,1] / (val[1,0] + val[1,1])
print(i, '-- tpr: ', tpr)
或者,您可以安装varname并使用varname.nameof()
获得名称。
答案 1 :(得分:2)
您可以从全局变量中检索变量名称
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}')
输出
df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82
答案 2 :(得分:1)
请注意,用于变量的名称不是您应该在代码逻辑中使用的名称-这只是一个坏主意。
但是-要知道您的输出来自哪个数据帧-您可以在循环中打印该数据帧的索引:
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])
print(f'df{i+1} -- tpr: {tpr}')
输出:
df1 -- tpr: 0.78
df2 -- tpr: 0.79
df3 -- tpr: 0.9
df4 -- tpr: 0.82
我使用i+1
来获得所需的输出,但是仅使用i
会更准确。