通常,在使用大型dask.DataFrame
时,仅抓取几行来测试所有后续操作会很有用。
目前,根据Slicing a Dask Dataframe,这是不受支持的。
head
来实现相同的功能(因为支持该命令),但这会返回一个常规的pandas DataFrame。df[:1000]
,它会执行,但会产生与您对Pandas不同的输出。有没有办法从dask.DataFrame
获取前1000行?
答案 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_delayed
和from_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行。