从`dask.DataFrame`切出几行

时间:2018-03-06 20:23:18

标签: dask

通常,在使用大型dask.DataFrame时,仅抓取几行来测试所有后续操作会很有用。

目前,根据Slicing a Dask Dataframe,这是不受支持的。

  • 我希望然后使用head来实现相同的功能(因为支持该命令),但这会返回一个常规的pandas DataFrame。
  • 我还尝试了df[:1000],它会执行,但会产生与您对Pandas不同的输出。

有没有办法从dask.DataFrame获取前1000行?

2 个答案:

答案 0 :(得分:5)

如果您的数据框有sensibly partitioned index,那么我建议您使用.loc

small = big.loc['2000':'2005']

如果要保持相同数量的分区,可以考虑采样

small = big.sample(frac=0.01)

如果您只想要一个分区,可以尝试get_partition

small = big.get_partition(0)

您还可以始终使用to_delayedfrom_delayed来构建自己的自定义解决方案。 http://dask.pydata.org/en/latest/dataframe-create.html#dask-delayed

更一般地说,Dask.dataframe不会保留每个分区的行数,因此具体的问题是"给我1000行"最终难以回答。回答问题会更容易,比如#34;给我1月份的所有数据"或者"给我第一个分区"

答案 1 :(得分:0)

您可以将初始DataFrame重新分区为任意数量的分区。如果要切片1000行:

npart = round(len(df)/1000)
parted_df = df.repartition(npartitions=npart)

然后只调用您想要的分区:

first_1000_rows = parted_df.partitions[0]

请注意,除非初始DataFrame中的行数是1000的倍数,否则您不会获得确切 1000行。