gpt4 book ai didi

python - 与多级索引数据帧一起使用时 pd.DataFrame.drop 的意外行为

转载 作者:行者123 更新时间:2023-12-04 10:26:17 24 4
gpt4 key购买 nike

从 Pandas 的多索引数据框中删除一列后,我出现了意外行为。

删除列后,我需要获取多索引数据帧的最外层(级别 = 0)列。为了获得 level=0 列,我使用了:

df.columns.levels[0]

但是,即使从原始数据帧中删除特定列并将其分配给新数据帧后,我仍然在索引列表中获得相同的元素,而不是更新的列列表。

例如:
INPUT: df
Box '1' '2' '3'
Latency code latency loc code latency loc code latency loc
0 9170. 948. L. 8170. 328. R. 9160. 238. L.
1 7540 1501. R 9170. 9028. L. 7170. 94. L.
INPUT:df.columns.levels[0]
Out: Index(['1', '2', '3'], dtype='object', name='Box Number')



dropped_df = df.drop('2', axis=1, level=0)
INPUT: dropped_df.columns.levels[0]
Out: Index(['1', '2', '3'], dtype='object', name='Box Number')


INPUT: dropped_df
Out:
Box '1' '3'
Latency code latency loc code latency loc
0 9170. 948. L. 9160. 238. L.
1 7540 1501. R 7170. 94. L.


我不确定这是一个错误还是我做错了什么......
为什么更新后的数据帧( dropped_df )返回与原始数据帧相同的列,即使更新后的 df 的输出显示数据帧已更改?原始数据帧是否被缓存(复制)在某处?

任何帮助/指针将不胜感激!

注意:我使用的是 python =3.6.8。/ Pandas =0.25.0

编辑 1:列是 string类型,所以这不是影响行为的不正确类型的问题。

最佳答案

经过一些调查并使用您作为示例提供的代码,并尝试:

dropped_df.columns.levels[1] = dropped_df.columns.levels[1]

我收到以下错误:
TypeError: 'FrozenList' does not support mutable operations.

研究 Pandas documentation似乎确实如此 answer :

The construct is used to represent a MultiIndex levels,labels, and names. The point of it is to prevent modification of these thru attributes and force the use of methods (e.g. set_levels()). As the state of these cannot be changed independent (for level/labels), but must be changed together.



当我们看到 dropped_df.columns.levels[1] 时解释为什么我们得到 Frozen(原始)值,不​​等于我们在简单显示时看到的 dropped_df

关于python - 与多级索引数据帧一起使用时 pd.DataFrame.drop 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com