Python 你能从Dask序列中随机抽取k值吗?

Python 你能从Dask序列中随机抽取k值吗?,python,dask,dask-dataframe,Python,Dask,Dask Dataframe,我想在不替换Dask序列的情况下随机采样k值,并且我不想事先计算序列的长度。如果k大于序列的长度,那么我想返回整个序列 我已经尝试过dask系列,但它无法将延迟对象作为frac参数处理: df=pd.DataFrame({“A”:[0,1,2]}) ddf=dd.from_熊猫(df,npartitions=1) ds=ddf[“A”] k=2 取样\u系列=ds.样本(分形=k/ds.形状[0]) 采样的_系列.compute() 给出了错误 TypeError:正在尝试将dd.Scalar

我想在不替换Dask序列的情况下随机采样k值,并且我不想事先计算序列的长度。如果k大于序列的长度,那么我想返回整个序列

我已经尝试过dask系列,但它无法将延迟对象作为
frac
参数处理:

df=pd.DataFrame({“A”:[0,1,2]})
ddf=dd.from_熊猫(df,npartitions=1)
ds=ddf[“A”]
k=2
取样\u系列=ds.样本(分形=k/ds.形状[0])
采样的_系列.compute()
给出了错误

TypeError:正在尝试将dd.Scalar转换为布尔值

我也尝试过,但当k大于包的长度时,它会抛出一个错误:

df=pd.DataFrame({“A”:[0,1,2]})
ddf=dd.from_熊猫(df,npartitions=1)
ds=ddf[“A”]
样本=随机样本(ds.to_bag(),k=4)
sample.compute()
给出了错误

异常:ValueError('样本大于总体或为负')


有什么方法可以得到我想要的结果吗?

在我看来,
df.shape
是一个延迟对象,可能是这给了你一个问题

我试过了,效果不错

将熊猫作为pd导入
将numpy作为np导入
将dask.dataframe作为dd导入
df=pd.DataFrame({“A”:np.arange(10)})
df=dd.from_熊猫(df,npartitions=2)
df_sampled=df.sample(frac=0.2)#我想要20%的数据

感谢@rpanai的建议,对我来说,一个足够的解决方案是从每个分区采样。比如说

df=pd.DataFrame({“A”:[0,1,2]})
ddf=dd.from_熊猫(df,npartitions=1)
ds=ddf[“A”]
k=2
sampled_series=ds.map_分区(lambda x:x.sample(n=min(k,x.shape[0]),meta=ds)
采样的_系列.compute()

谢谢@rpanai的回答。但是,我想从任意Dask序列(任意长度)中抽取固定数量的行,而无需在抽样之前计算序列的长度。因此,
.sample()
frac
参数取决于
df.shape
(或数据的长度)在调用
.sample()之前,我不想计算它
。如果您从每个分区中提取固定数量的行,该怎么办?在这种情况下,您可以使用map\u分区仅供参考:彻底回答问题非常耗时。如果您的问题已解决,请接受最适合您需要的解决方案,表示感谢。接受检查位于答案左上角的上/下箭头下方。新解决方案如果出现更好的答案,则可以接受。您也可以使用向上或向下箭头对答案的质量/帮助性进行投票。如果解决方案无法回答问题,请留下评论。?。谢谢