在 Python Pandas 中创建大型 MultiIndex(1000 万行)的问题用于重新索引大型 DataFrame

Problems with creating large MultiIndex (10 million rows) in Python Pandas used to reindex large DataFrame

我的情况是我有一个带有 MultiIndex 的 DataFrame,包括 TimeStamp 和数字(波长从 280-4000 nm),其中波长数间距从每 1 nm 到 5 nm 变化。我需要 1 nm 间距并计划在重新索引我的 DataFrame 后进行线性插值。

我尝试使用 pd.MultiIndex.from_product() 创建一个 MultiIndex 并提供两个列表,每个列表的长度约为 4000 项,这导致 Python 耗尽了我计算机的所有 RAM。代码如下:

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)

我的问题是:

感谢您的帮助!

这应该不是问题。您需要更具体地说明 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