python - 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
我了解子数据帧的索引与数据对象的索引不同,我认为这个问题是由于示例方法造成的,我不确定这是否正确。有人可以帮我解决这个错误。
解决方案
您的问题正在发生,因为您正在尝试使用索引标签对 data.index 进行子集化。
更改此行:
data = data.drop(data.index[subset.index])
至
data = data.drop(subset.index)
但是,如果您的数据框未拆分并完全相等,那么接下来您将面临“ValueError:当'replace = False'时无法获取比总体更大的样本”错误。
推荐阅读
- c# - Assembly.LoadFile 和 CreateInstance ... StrongName 是必须的吗?
- javascript - 如何删除前置的兄弟项目
- sas - 从输出表中获取平均值
- ios - Firebase 和 Swift - 读取数据返回 nil
- python - 如何在 Python 中处理和转换不同的碱基而不将它们解析为字符串?
- javascript - 在哪里存储 Node 应用程序的 Firebase 私钥
- python - 当订阅者断开连接时,如何从发布者恢复丢弃的消息?
- ipython - 安装新包后重新启动 IPython 内核 - Hydrogen vs Jupyter
- xaml - MSBuild:UpdateDesignTimeXaml 有什么作用?
- c# - 缓存设备上下文