将数据框拆分为N个

时间:2018-01-27 16:20:58

标签: python for-loop dataframe macros scikit-learn

上下文

大家好,我试图将我的数据集分成180个独特的部分然后通过地理编码器运行(我的n是~180,000,地理编码器有1000个批次限制)。我对Python很陌生,但是一些谷歌搜索让我在shufflesklearn.utils。它似乎做了诀窍,这里的代码做了我想要的(概念上):

from sklearn.utils import shuffle

df = shuffle(addresses)
df1 = df[0:1000]
df2 = df[1000:2000]
df3 = df[2000:3000]

但是,我显然不想坐下来手动构建180个这样的数据帧,所以我正在寻找一种方法将它放入循环中。这是我的基本想法:

start = 0
end = 1000
for a in range(1,180):
    print(start, end, a)
    start = start+1000
    end = end+1000

以上工作正常。

无效的代码

然而,当我尝试将实际拆分集成到循环中时(不仅仅是打印),它失败了。我非常确定问题在于我在命名数据帧时如何调用宏a。我不知道如何解决这个问题。

from sklearn.utils import shuffle
df = shuffle(addresses)

start = 0
end = 1000
for a in range(1,180):
    df_str(a) = df[start:end]
    start = start+1000
    end = end+1000

2 个答案:

答案 0 :(得分:1)

潜在的解决方法:

df_str = dict()
for a in range(1,180):
    df_str[a] = df[start:end]
    start += 1000
    end += 1000

可能的先前错误:

  • 确保定义df_str。推荐为字典。

  • 您似乎将df_str称为带圆括号的函数,方括号更常用于元素访问。

答案 1 :(得分:0)

您可以尝试使用exec()函数执行您创建的数据框。这里,“ format()”方法用于更改数据框的名称。 例如,if a=1然后{} = data'.format("df_%d" %(a)))会将数据重命名为df_1

   start = 0
   end = 1000
   df_str = dict()
   for a in range(1,180):
       df_str[a] = df.iloc[start:end]
       data= df_str[a]
       exec('{} = data'.format("df_%d" %(a)))
       start = start+1000
       end = end+1000
       del data

如果希望数据帧的索引从0开始,则可以使用reset_index(drop = True)重置索引:

exec('{} = data'.format("df_%d.reset_index(drop=True)" %(a)))