如何获取Dask DataFrame的长度?附指定数量采样优化方案
嘿,这个问题很实用!我来帮你梳理清楚,顺便给你一个更省心的解决方案:
获取Dask DataFrame的长度 & 直接采样指定数量条目
一、怎么拿到Dask DataFrame的实际行数
和Pandas的即时计算不同,Dask是延迟计算的——你看到的dd.Scalar<series-..., dtype=int32>就是还没执行的延迟对象。要拿到实际数值,得用.compute()触发计算:
针对你的示例代码,调整后是这样:
import dask.dataframe as dd import pandas as pd import numpy as np # 先创建Pandas DataFrame df = pd.DataFrame(np.random.normal(0, 1, (5, 2)), columns=["A", "B"]) df_dask = dd.from_pandas(df, npartitions=3) # 获取总行数(包含空值,对应Pandas里的len(df)) total_rows = len(df_dask) print(total_rows.compute()) # 输出:5 # 如果要统计某一列的非空值数量(对应Pandas里的df['A'].count()) non_null_count = df_dask['A'].count() print(non_null_count.compute()) # 输出:5
二、更高效的方式:直接采样指定数量的条目
你说要通过行数计算比例来实现固定数量采样,其实完全没必要!Dask的sample()方法本身就支持直接指定采样条数,不用自己算比例——用n参数代替frac参数就行:
# 直接采样3条数据,random_state保证结果可复现 sampled_df = df_dask.sample(n=3, random_state=42).compute() print(sampled_df)
这种方式不仅省掉了计算总行数的步骤,还避免了全量扫描数据集的开销(对超大数据集来说这点特别重要),效率高得多。
小提醒
- 如果你的Dask版本比较老,可能需要确认
sample的n参数是否存在,建议升级到最新稳定版。 - 要是你确实必须计算行数,记得
len(df_dask).compute()会触发全量数据扫描,大数据集下会很慢,能不用就不用。
内容的提问来源于stack exchange,提问作者C. L.
相关产品推荐
相关产品推荐

