从 `dask.DataFrame` 中切出几行
Slicing out a few rows from a `dask.DataFrame`
通常,在处理大型 dask.DataFrame
时,只抓取几行来测试所有后续操作会很有用。
目前,根据 Slicing a Dask Dataframe,这是不受支持的。
- 我希望然后使用
head
来实现相同的目的(因为支持该命令),但是 returns 一个常规的 pandas DataFrame。
- 我也尝试了
df[:1000]
,它会执行,但生成的输出与您对 Pandas 的预期不同。
有没有办法从 dask.DataFrame
中获取前 1000 行?
如果您的数据框有 sensibly partitioned index 那么我建议使用 .loc
small = big.loc['2000':'2005']
如果你想保持相同数量的分区,你可以考虑sample
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 不会为每个分区保留 row-counts,因此 "give me 1000 rows" 这个具体问题最终出奇地难以回答。回答 "give me all the data in January" 或 "give me the first partition"
这样的问题要容易得多
您可以将初始 DataFrame 重新分区为任意数量的分区。如果您想要 1000 行的切片:
npart = round(len(df)/1000)
parted_df = df.repartition(npartitions=npart)
然后调用您想要的分区:
first_1000_rows = parted_df.partitions[0]
请注意,除非初始 DataFrame 中的行数是 1000 的倍数,否则您不会正好 1000 行。
通常,在处理大型 dask.DataFrame
时,只抓取几行来测试所有后续操作会很有用。
目前,根据 Slicing a Dask Dataframe,这是不受支持的。
- 我希望然后使用
head
来实现相同的目的(因为支持该命令),但是 returns 一个常规的 pandas DataFrame。 - 我也尝试了
df[:1000]
,它会执行,但生成的输出与您对 Pandas 的预期不同。
有没有办法从 dask.DataFrame
中获取前 1000 行?
如果您的数据框有 sensibly partitioned index 那么我建议使用 .loc
small = big.loc['2000':'2005']
如果你想保持相同数量的分区,你可以考虑sample
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 不会为每个分区保留 row-counts,因此 "give me 1000 rows" 这个具体问题最终出奇地难以回答。回答 "give me all the data in January" 或 "give me the first partition"
这样的问题要容易得多您可以将初始 DataFrame 重新分区为任意数量的分区。如果您想要 1000 行的切片:
npart = round(len(df)/1000)
parted_df = df.repartition(npartitions=npart)
然后调用您想要的分区:
first_1000_rows = parted_df.partitions[0]
请注意,除非初始 DataFrame 中的行数是 1000 的倍数,否则您不会正好 1000 行。