【问题标题】:Splitting a dataframe into many smaller data frames evenly-ish将数据帧均匀地拆分为许多较小的数据帧
【发布时间】:2020-10-06 00:51:23
【问题描述】:

我有一个名为 df 的框架,它有 65 个项目长。

   Name  Data
0  Name1 Data1
1  Name2 Data2
2  Name3 Data3
....

我想将它尽可能均匀地分成 30 个数据帧。

所以长度为 65,我希望有 5 个长度为 3 的帧和 25 个长度为 2 的帧(加起来为 65)

我使用以下函数:

def chunk(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

n = 30 #number of files

length = len(df)

counter=0

for df_chunk in chunk(frame, int(length / n) + (length % n > 0)):
    counter+=1
    df_chunk.to_csv(f"path/to/file{counter}.csv")

但我只得到 21 个长度为 3 的文件和 1 个长度为 2 的文件,而不是 5 个长度为 3 的文件和 25 个长度为 2 的文件。

有人对我如何实现我想要的有任何想法吗?

【问题讨论】:

  • for k,d in df.groupby(np.arange(len(df))//30): print(k,d).
  • 我得到 3 帧,长度分别为 30、30 和 5
  • 抱歉,请将//30 替换为%30
  • 好的,现在可以使用了,
  • 有没有办法让 k,d 中的 k 从 1 开始?除了使用我自己的计数器

标签: python pandas split chunking


【解决方案1】:

使用np.array_split,来自它说的文档:

对于一个长度为l 的数组应该被分成n 个部分,它 返回大小为l//n + 1l % n 子数组和大小为l//n. 的其余子数组:

for counter, df_chunk in enumerate(np.array_split(df, 30), 1):
    df_chunk.to_csv(f"path/to/file{counter}.csv")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多