首页 > 解决方案 > Dataframe.sample 方法不返回正确的索引

问题描述

我正在尝试从一个数据集创建多个子集。这在我的代码中:

def create_subdatasets(data, number_of_subdataset):
    subset_len = int(round(len(data))/number_of_subdataset)
    subsets = []
    while (len(data)>0):
        subset = data.sample(subset_len)
        subsets.append(subset)
        data = data.drop(data.index[subset.index])
    return subsets

但有这个错误:

--------------------------------------------------------------------------- IndexError                                Traceback (most recent call last) <ipython-input-95-587e16cc1433> in <module>
      2 data2 = data
      3 data2 = data2.reset_index()
----> 4 subsets = create_subdatasets(data2, number_of_subdataset)
      5 print(len(subsets))

<ipython-input-94-3f8ca422541f> in create_subdatasets(data, number_of_subdataset)
      6         print(subset.index)
      7         subsets.append(subset)
----> 8         data = data.drop(data.index[subset.index])
      9         #data = data.reset_index()
     10     return subsets

~/anaconda3/envs/tf-gpu/lib/python3.6/site-packages/pandas/core/indexes/base.py in __getitem__(self, key)    4289     4290         key = com.values_from_object(key)
-> 4291         result = getitem(key)    4292         if not is_scalar(result):    4293             return promote(result)

IndexError: index 5068 is out of bounds for axis 1 with size 4995

我了解子数据帧的索引与数据对象的索引不同,我认为这个问题是由于示例方法造成的,我不确定这是否正确。有人可以帮我解决这个错误。

标签: pythonpandasdataframe

解决方案


您的问题正在发生,因为您正在尝试使用索引标签对 data.index 进行子集化。

更改此行:

data = data.drop(data.index[subset.index])

data = data.drop(subset.index)

但是,如果您的数据框未拆分并完全相等,那么接下来您将面临“ValueError:当'replace = False'时无法获取比总体更大的样本”错误。


推荐阅读