从熊猫的多索引数据框中删除一列后,我一直遇到意外的行为。
删除列后,我需要获取多索引数据帧的最外层(级别= 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.
我不确定这是错误还是在做错什么...即使更新的df的输出显示了更新的数据帧(dropd_df
)返回的列与原始数据帧的列相同的原因,为什么?数据框已更改?原始数据帧是否在某处缓存(复制)?
任何帮助/指针将不胜感激!
注意:我使用的是python = 3.6.8。/熊猫= 0.25.0
编辑1:列是字符串
类型,所以这不是影响行为的错误类型。
问题来源:stackoverflow
经过调查并使用您提供的代码作为示例,然后尝试:
dropped_df.columns.levels[1] = dropped_df.columns.levels[1]
我收到以下错误:
TypeError: 'FrozenList' does not support mutable operations.
研究熊猫文件似乎确实如以下答案所述:
该构造用于表示MultiIndex级别,标签和名称。这样做的目的是防止修改这些直通属性,并强制使用方法(例如set_levels())。由于这些状态不能单独更改(对于级别/标签),而必须一起更改。
解释为什么看到“ dropd_df.columns.levels [1]”时会得到“冻结”(原始)值,而不是等于简单地显示“ dropd_df”时看到的结果
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。