有没有一种更简单的方法可以从具有多索引列的 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
我有一个 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