如何从dask数据帧中提取50行?

2024-04-26 12:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想从Dask数据帧中提取50行,但我做不到。 最后,我想制作一个新的dataframe,每个类有50行。你知道吗

当我运行这个代码时

import dask.dataframe as dd

ddf = dd.from_pandas(train_csv, npartitions=30)
classes = train_csv.landmark_id.unique()
for cl in tqdm(classes):
    tmpdf = ddf.loc[ddf["landmark_id"] == cl]
    print(len(tmpdf))

结果是

1048
359
182
149
94
57
78
157
.
.
.

因此,每个tmpdf必须有50多行。 但是当我运行这个代码时

import dask.dataframe as dd

ddf = dd.from_pandas(train_csv, npartitions=30)
classes = train_csv.landmark_id.unique()
for cl in tqdm(classes):
    tmpdf = ddf.loc[ddf["landmark_id"] == cl]
    tmpdf = tmpdf[:50]
    print(len(tmpdf))

结果是

1
1
1
1
1
.
.
.

我想索引可能是错了。所以呢运行了这个代码

import dask.dataframe as dd

ddf = dd.from_pandas(train_csv, npartitions=30)
classes = train_csv.landmark_id.unique()
for cl in tqdm(classes):
    tmpdf = ddf.loc[ddf["landmark_id"] == cl]
    tmpdf = tmpdf.reset_index()
    tmpdf = tmpdf[:50]
    print(len(tmpdf))

但结果是

1048
359
182
149
94
57
78
.
.
.

怎么回事?你知道吗

我也试过.compute() 我运行了这个代码

import dask.dataframe as dd

ddf = dd.from_pandas(train_csv, npartitions=30)
classes = train_csv.landmark_id.unique()
for cl in tqdm(classes):
    tmpdf = ddf.loc[ddf["landmark_id"] == cl]
    tmpdf = tmpdf.compute()
    tmpdf = tmpdf[:50]
    print(len(tmpdf))

现在我可以纠正结果了

50
50
50
50
50
.
.
.

但是执行的时间太长了。 我使用dask的最初原因是速度。。。你知道吗


Tags: csv代码fromimportiddataframeclas
1条回答
网友
1楼 · 发布于 2024-04-26 12:13:06

这行for cl in tqdm(classes):给出了错误

  0%|          | 0/5 [00:00<?, ?it/s]Traceback (most recent call last):
  File "....py", line ...., in <module>
    for cl in tqdm(classes):
  File "...\tqdm\_tqdm.py", line 1000, in __iter__
    for obj in iterable:
  File "...\dask\dataframe\core.py", line 2046, in __getitem__
    raise NotImplementedError()
NotImplementedError

所以我不确定你的代码是如何在循环中打印整数的。你知道吗

无论如何,如果您打印出classes,您将看到它是一个延迟对象(daskSeries

print(classes)
Dask Series Structure:
npartitions=1
    object
       ...
Name: landmark_id, dtype: object
Dask Name: unique-agg, xx tasks

所以,IIUC,在循环之前需要计算classes。使用其中一个

for cl in tqdm(classes.compute()):

或者

for cl in classes.compute():

相关问题 更多 >