【问题标题】:Splitting up a dataframe into N pieces将数据框拆分为 N 块
【发布时间】:2018-01-27 16:20:58
【问题描述】:

上下文

大家好,我正在尝试将我的数据集拆分为 180 个不同的部分,然后通过地理编码器运行它(我的 n 约为 180,000 并且地理编码器的批次限制为 1,000)。我对 Python 还很陌生,但一些谷歌搜索让我在sklearn.utils 中找到了shuffle。它似乎可以解决问题,这里的代码可以满足我的要求(从概念上):

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

【问题讨论】:

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


    【解决方案1】:

    您可以尝试使用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)))
    

    【讨论】:

    • 对代码的解释有助于提高帖子的质量。如果可能,请添加 cmets 或解释。
    【解决方案2】:

    可能的修复:

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

    以前可能存在的错误:

    • 确保定义了 df_str。推荐当字典。

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

    【讨论】:

    • 感谢您对 Siong 的评论。不幸的是,这并没有解决我的问题。我的理解是我正在定义 df_;我只是想在字符串值 df_ 上添加一个后缀,它采用整数 a 的字符串值。这就是我现在拥有的:start = 0end = 1000for a in range(1,180):b = str(a)print(b)df_[b] = df[start:end]start = start+1000end = end+1000但它返回TypeError: 'str' object does not support item assignment
    • 您最近的错误是由于您将 df_ 定义为字符串,而字符串在 python 中是不可变的。您可能想像字典一样探索结构。然后可以将第 i 个子数据帧存储为第 i 个条目。
    • 再次感谢您的评论 Siong。虽然它仍然没有解决我的问题。循环后字典为空。此外,我认为不可能将其与我的其他代码配合使用。我真的需要它们在数据框中。你知道怎么做吗?
    • this link 可能会引起您的兴趣。
    • 谢谢。我会更仔细地研究这个。您链接的帖子建议,如果我绝对知道自己在做什么,我只会做我想做的事情;我绝对不知道,但是在我真正解决我遇到的问题之前,我想投入多少时间到达那个地方,这是一个权衡。不过真的很有用——感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2020-09-16
    相关资源
    最近更新 更多