我应该如何获得dask数据帧的形状?

use*_*897 10 python dask

执行.shape会给我以下错误.

AttributeError:'DataFrame'对象没有属性'shape'

我应该如何获得形状呢?

小智 22

使用形状,您可以执行以下操作

a = df.shape
a[0].compute(),a[1]
Run Code Online (Sandbox Code Playgroud)

这将购买形状就像熊猫显示的一样


MRo*_*lin 21

您可以直接获取列数

len(df.columns)  # this is fast
Run Code Online (Sandbox Code Playgroud)

你也可以在数据帧本身上调用len,但要注意这会触发计算.

len(df)  # this requires a full scan of the data
Run Code Online (Sandbox Code Playgroud)

如果没有先阅读所有记录,Dask.dataframe就不知道数据中有多少条记录.

  • 我一直在执行“df.index.size.compute()”,它比运行“len(df)”更快...但是我的数据存储在柱状镶木地板中...所以这取决于您的底层数据架构是。 (3认同)

ipe*_*tta 7

好吧,我知道这是一个相当老的问题,但我遇到了同样的问题,并且我得到了一个开箱即用的解决方案,我只想在这里注册。

考虑到您的数据,我想知道它最初保存在类似 CSV 的文件中;因此,对于我的情况,我只计算该文件的行数(减去一,标题行)。受到这个答案的启发,这是我正在使用的解决方案:

import dask.dataframe as dd
from itertools import (takewhile,repeat)
 
def rawincount(filename):
    f = open(filename, 'rb')
    bufgen = takewhile(lambda x: x, (f.raw.read(1024*1024) for _ in repeat(None)))
    return sum( buf.count(b'\n') for buf in bufgen )

filename = 'myHugeDataframe.csv'
df = dd.read_csv(filename)
df_shape = (rawincount(filename) - 1, len(df.columns))
print(f"Shape: {df_shape}")
Run Code Online (Sandbox Code Playgroud)

希望这也可以帮助其他人。