【发布时间】:2015-09-15 11:34:25
【问题描述】:
我最近遇到了一个大型数据框及其关联的多索引的问题。 这个简化的例子将演示这个问题。
import pandas as pd
import numpy as np
np.random.seed(1)
idx = pd.MultiIndex.from_product([['A','B'],[5,6]])
df = pd.DataFrame(data= np.random.randint(1,100,(4)),index= idx,columns =['P'])
print df
产量:
P
A 5 38
6 13
B 5 73
6 10
现在快速浏览一下索引
print df.index
MultiIndex(levels=[[u'A', u'B'], [5, 6]],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]])
如果我对这个数据框进行切片,我会注意到多索引从不压缩。 即使是深拷贝。
在切片操作中减少索引内存占用的最佳方法是什么?
df_slice = df[df['P']>20]
print df_slice
print df_slice.index
P
A 5 38
B 5 73
查看数据框如何减少,但索引没有。
MultiIndex(levels=[[u'A', u'B'], [5, 6]],
labels=[[0, 1], [0, 0]])
即使是 .copy(deep=True)
df_slice = df[df['P']>20].copy(deep=True)
print df_slice.index
MultiIndex(levels=[[u'A', u'B'], [5, 6]]
,labels=[[0, 1], [0, 0]])
我希望 MultiIndex 删除 6,如下所示:
MultiIndex(levels=[[u'A', u'B'], [5]]
,labels=[[0, 1], [0, 0]])
当数据框很大时,问题就会出现。
【问题讨论】:
-
当我从数据框中删除一些行时也是如此。人们会期望,如果行被删除,为什么索引会保留这些值!