开发者社区> 问答> 正文

与多级索引数据框一起使用时,pd.DataFrame.drop的异常行为

从熊猫的多索引数据框中删除一列后,我一直遇到意外的行为。

删除列后,我需要获取多索引数据帧的最外层(级别= 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

展开
收起
is大龙 2020-03-24 15:44:57 604 0
1 条回答
写回答
取消 提交回答
  • 经过调查并使用您提供的代码作为示例,然后尝试:

    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

    2020-03-24 15:45:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
demystifying dataframe and dataset 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载