如何获取Dask DataFrame的形状?调用.shape报AttributeError的解决方法
解决Dask DataFrame无法获取
shape的问题 嘿,这个问题我之前也碰到过!Dask DataFrame因为是分布式延迟计算的结构,和Pandas那种全量加载到内存的DataFrame不一样,所以直接调用.shape会抛出AttributeError。别担心,这里有两种靠谱的解决方式:
方法1:高效获取(强烈推荐)
如果你的Dask版本是2021.06及以后的较新版本,其实已经支持shape属性了——不过它返回的元组里,行数是个延迟计算对象,得用.compute()触发计算才能拿到具体数值,列数则可以直接获取:
# 直接拿到列数,不需要任何计算 num_cols = df.shape[1] # 触发计算获取行数,不会把全量数据加载到内存 num_rows = df.shape[0].compute() # 组合成完整的形状元组 full_shape = (num_rows, num_cols)
要是你用的是比较旧的Dask版本,不支持shape属性也没关系:
- 列数:直接用
len(df.columns)就能轻松拿到 - 行数:用
df.size.compute()更高效(size是所有元素的总数,除以列数就是总行数),或者也可以用df.count().sum().compute(),不过前者性能更好
方法2:转成Pandas DataFrame再获取(仅适合小数据)
如果你的数据集很小,能完全塞进本地内存,也可以先把Dask DataFrame转成Pandas的,再用熟悉的.shape:
# 注意:仅适合小数据集!会把所有数据加载到内存 pandas_df = df.compute() shape = pandas_df.shape
这种方法别在大数据场景用,很容易内存溢出,只适合测试小样本的时候用。
总之,优先用方法1,既高效又不会有内存压力,完全适配Dask的分布式特性~
内容的提问来源于stack exchange,提问作者user1559897
相关产品推荐
相关产品推荐

