有没有一种更简单的方法可以从具有多索引列的 Pandas DataFrame 中获取单个值?

Is there an easier way to grab a single value from within a Pandas DataFrame with multiindexed columns?

我有一个 Pandas 机器学习实验结果的 DataFrame(来自 MLFlow)。我正在尝试访问第 0 行和列中“标签”->“run_id”多索引下的单个元素的 run_id。

DataFrame 名为 experiment_results_df。我可以使用以下命令访问该元素:

experiment_results_df.loc[0,(slice(None),'run_id')].values[0]

我认为我应该能够通过如下语句获取值本身:

experiment_results_df.at[0,('tags','run_id')]
# or...
experiment_results_df.loc[0,('tags','run_id')]

但其中任何一个都会导致以下相当混乱的错误(因为我没有设置任何东西):

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.

它现在可以工作了,但我更愿意使用更简单的语法。更重要的是,我想了解为什么另一种方法不起作用,以及我是否可以修改它。与常规索引相比,我发现在 Pandas 中使用多索引非常令人沮丧,但是当我将 DF 打印到控制台或在 CSV 查看器中显示它时,额外的格式很好,因为我目前有 41 列(并且还在增加).

我不明白是什么问题:

df = pd.DataFrame({('T', 'A'): {0: 1, 1: 4},
                   ('T', 'B'): {0: 2, 1: 5},
                   ('T', 'C'): {0: 3, 1: 6}})
print(df)

# Output
   T      
   A  B  C
0  1  2  3
1  4  5  6

如何提取1

>>> df.loc[0, ('T', 'A')]
1

>>> df.at[0, ('T', 'A')]
1

>>> df.loc[0, (slice(None), 'A')][0]
1