【问题标题】:Is it possible to split a df into two dfs using dask是否可以使用 dask 将 df 拆分为两个 df
【发布时间】:2021-06-19 18:08:33
【问题描述】:

我有一个庞大的数据集。它有近 300k 行。我想把它分成两半。它们每个都包含 150k 行。是否可以使用 dask 来做到这一点?

【问题讨论】:

  • 只需创建一个dask 数据框。然后使用numpy 将 df 一分为二。检查this
  • 只是选择了一些列,对吗?我想选择行。我已经试过了。df1 = df.iloc[:72, :] df2 =df.iloc[72:, :]
  • 检查this。这按行拆分。
  • 但它不起作用。我得到了这个错误。 NotImplementedError:“DataFrame.iloc”仅支持选择列。它必须像 'df.iloc[:, column_indexer]' 一样使用。
  • 检查我的第二个链接。使用np.array_split,而不是iloc

标签: python pandas dataframe dask


【解决方案1】:

Dask 设计为具有分区的 DataFrame。让我们举个例子,您在某个名为/path/ 的目录中有任意数量的 CSV 文件(如果您的 300k 行的整个数据集位于某个目录中的许多 CSV 文件中,这将创建两个大小为 150k 的分区):

import dask.dataframe as dd
df = dd.read_csv("/path/*.csv").repartition(npartitions=2)

如果您已经拥有以前工作的数据框,当然可以使用

df = df.repartition(npartitions=2)

以 CSV 为例,如果您恰好有两个 CSV 文件,则调用重新分区是多余的。请记住,重新分区将为 dask 任务图添加额外的步骤,您可能希望在初始化数据帧后调查重新分区的性能成本/收益。查看the diagnostics part of the documentation for more

【讨论】:

  • 如何将分区保存为单独的 csv 文件?
  • 跳过第 4 行:',' 预计在 '"' 之后 跳过第 41223 行:数据意外结束 跳过第 41120 行:数据意外结束 跳过第 47125 行:数据意外结束 跳过第 173 行:', ' 预计在 '"' 之后跳过第 176 行:',' 预计在 '"' 之后-------------------------------- ------------------------------------------------------- MemoryError 我收到这样的错误在尝试将 df 保存为 csv 文件时
  • 查看API documentation for dask.dataframe.to_csv,如果您在输出名称中使用通配符 (*),Dask 默认会将分区保存到单独的 csv 文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2021-06-14
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多