【发布时间】:2019-12-10 09:58:58
【问题描述】:
我有一个包含 15000 个唯一 Series_Id 的列的数据集。我想创建每个有 200 行的数据框的子集,并将其存储为单独的数据框。所以一共有75个数据集。
我只是想不出如何解决这个问题。我可以做到这一点的一种方法是通过行索引对 200 行的子集进行索引,但我必须这样做 75 次。
没有任何这样的代码。我正在尝试制作一个功能。
【问题讨论】:
标签: python pandas function loops subset
我有一个包含 15000 个唯一 Series_Id 的列的数据集。我想创建每个有 200 行的数据框的子集,并将其存储为单独的数据框。所以一共有75个数据集。
我只是想不出如何解决这个问题。我可以做到这一点的一种方法是通过行索引对 200 行的子集进行索引,但我必须这样做 75 次。
没有任何这样的代码。我正在尝试制作一个功能。
【问题讨论】:
标签: python pandas function loops subset
如果您想将每个子集存储为单独的数据帧,除了循环 75 次之外,我想不出任何其他方法。 如果我是你,我会遍历原始数据帧,一次抓取 200 行,并将其作为数据帧存储在字典中,作为值,其键将是循环号。 如下所示:
dict_subsets = {}
for i in range(0, (15000/200)):
row_start = i * 200
row_end = row_start + 200
df_curr = df_original.loc[row_start:row_end]
dict_subsets['df_' + str(i)] = df_curr
【讨论】:
您也许可以使用numpy.split,因为pandas DataFrame 大多只是numpy 数组:
import pandas as pd
import numpy as np
df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
print(df)
# x y
# 0 1 4
# 1 2 5
# 2 3 6
n = 3 # 200 for you
for df2 in np.split(df, n):
print(df2)
# x y
# 0 1 4
# x y
# 1 2 5
# x y
# 2 3 6
它试图使每个块的大小相同。如果无法进行这样的拆分,则会引发错误。您可以通过手动添加空行(包含 NaN 或类似内容)或将其切成 200 的倍数来避免这种情况。
【讨论】: