我的情况是我有一个带有MultiIndex的DataFrame,包括TimeStamp
和数字(波长从280到4000 nm),其中波长数间距从每1 nm变化到5 nm。我需要1 nm间距并计划并计划在重新索引我的DataFrame后进行线性插值。
我尝试使用MultiIndex
创建pd.MultiIndex.from_product()
并提供两个长度约为4000项的列表,这些列表导致Python耗尽了我所有的计算机内存。代码如下:
mindex = pd.MultiIndex.from_product([times_list, waves_list],
names=['TmStamp', 'Wvlgth']
)
from_product()
是一个简单的功能,所以我不认为我搞砸了它,但我认为它能够处理比我通过它更大的列表。
为了试图解决这个问题,我使用了pd.MultiIndex()
并传递了唯一的级别,与.from_product()
传递的内容相同,但使用下面的代码为每个级别构建了标签:
times = Series(df.index.get_level_values('TmStamp').values).unique()
times_Series = Series(times)
times_label_list = list()
counter = 0
for i in times_Series:
temp_list = Series([counter] * 3721)
times_label_list.append(temp_list)
counter +=1
times_label = pd.concat(times_label_list)
和
waves_levels = np.arange(280,4001,1).tolist()
waves_label = np.arange(0,3721,1).tolist() * times_count
中使用的
midx = pd.MultiIndex([times_list, waves_levels],
labels=[times_label, waves_label],
names=['TmStamp','Wvlng']
)
并且MultiIndex
用于重新索引我的df
ri_df = df.reindex(midx)
我的问题是:
pd.MultiIndex.from_product()
还是不能处理通过大型名单?感谢您的帮助!
答案 0 :(得分:1)
这应该不是问题。你需要更具体地说明times_list实际上是什么。
In [2]: mi = pd.MultiIndex.from_product([pd.date_range('20130101',freq='s',periods=4000),
...: np.arange(280,4000)],names=['times','wl'])
In [4]: mi.nbytes/(1024*1024.0)
Out[4]: 56.82167148590088
In [6]: len(mi)
Out[6]: 14880000