实际上,您不能 保证
大小相等的块。行数(N)可能是素数,在这种情况下,您只能获得大小相等的1或N块。因此,实际分块通常使用固定大小,并允许最后使用较小的块。我倾向于将数组传递给
groupby。从…开始:
>>> df = pd.Dataframe(np.random.rand(15, 5), index=[0]*15)>>> df[0] = range(15)>>> df 0 1 2 3 40 0 0.746300 0.346277 0.220362 0.1726800 1 0.657324 0.687169 0.384196 0.2141180 2 0.016062 0.858784 0.236364 0.963389[...]0 13 0.510273 0.051608 0.230402 0.7569210 14 0.950544 0.576539 0.642602 0.907850[15 rows x 5 columns]
我故意通过将索引设置为0来使索引无意义,我们只需确定大小(此处为10),然后按整数除以一个数组即可:
>>> df.groupby(np.arange(len(df))//10)<pandas.core.groupby.DataframeGroupBy object at 0xb208492c>>>> for k,g in df.groupby(np.arange(len(df))//10):... print(k,g)... 0 0 1 2 3 40 0 0.746300 0.346277 0.220362 0.1726800 1 0.657324 0.687169 0.384196 0.2141180 2 0.016062 0.858784 0.236364 0.963389[...]0 8 0.241049 0.246149 0.241935 0.5634280 9 0.493819 0.918858 0.193236 0.266257[10 rows x 5 columns]1 0 1 2 3 40 10 0.037693 0.370789 0.369117 0.4010410 11 0.721843 0.862295 0.671733 0.605006[...]0 14 0.950544 0.576539 0.642602 0.907850[5 rows x 5 columns]
当索引与索引不兼容时,基于切片Dataframe的方法可能会失败,尽管您始终
.iloc[a:b]可以忽略索引值并按位置访问数据。



