相关疑难解决方法(0)

pandas:优化我的代码(groupby()/ apply())

我有一个形状(RxC)1.5M x 128的数据帧.我执行以下操作:

  1. 我基于6列做groupby().这创建了~8700个子组,每个子组的形状为538 x 122.
  2. 在每个子组中,我运行apply().此函数计算子组中每个分类值PER列(即122)的%频率.

所以我的(pesudo)代码:

<df = Read dataframe from file> g = df.groupby(grp_cols) g[nongrp_cols].apply(lambda d: d.apply(lambda s: s.value_counts()) / len(d.index))

代码对我来说工作正常,所以现在我正在分析它以提高性能.apply()函数运行大约需要20-25分钟.我认为问题是它是在每列(122次)上迭代8700次(每个子组),这可能不是最好的方式(给定我编码的方式).

任何人都可以推荐一些方法来加快速度吗?

我尝试使用python多处理池(8个进程)将子组划分为相同的集合进行处理,但最终得到一些酸洗错误...

谢谢.

pandas

8
推荐指数
1
解决办法
2097
查看次数

简单的dask map_partitions示例

我读了以下SO thead,现在我想了解它.这是我的例子:

import dask.dataframe as dd
import pandas as pd
from dask.multiprocessing import get
import random

df = pd.DataFrame({'col_1':random.sample(range(10000), 10000), 'col_2': random.sample(range(10000), 10000) })

def test_f(col_1, col_2):
    return col_1*col_2

ddf = dd.from_pandas(df, npartitions=8)

ddf['result'] = ddf.map_partitions(test_f, columns=['col_1', 'col_2']).compute(get=get)
Run Code Online (Sandbox Code Playgroud)

它会在下面生成以下错误.我究竟做错了什么?另外我不清楚如何将其他参数传递给函数map_partitions

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\dask\dataframe\utils.py in raise_on_meta_error(funcname)
    136     try:
--> 137         yield
    138     except Exception as e:

~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\dask\dataframe\core.py in _emulate(func, *args, **kwargs)
   3130     with raise_on_meta_error(funcname(func)):
-> 3131         return func(*_extract_meta(args, True), **_extract_meta(kwargs, True))
   3132 

TypeError: test_f() …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing dask

6
推荐指数
2
解决办法
9499
查看次数

将 dask 数据框中的列转换为 Doc2Vec 的 TaggedDocument

介绍

目前,我正在尝试将 dask 与 gensim 配合使用来进行 NLP 文档计算,并且在将我的语料库转换为“ TaggedDocument ”时遇到问题。

因为我尝试了很多不同的方法来解决这个问题,所以我将列出我的尝试。

每次处理这个问题的尝试都会遇到略有不同的困境。

首先是一些初步的假设。

数据

df.info()
<class 'dask.dataframe.core.DataFrame'>
Columns: 5 entries, claim_no to litigation
dtypes: object(2), int64(3)
Run Code Online (Sandbox Code Playgroud)
  claim_no   claim_txt I                                    CL ICC lit
0 8697278-17 battery comprising interior battery active ele... 106 2 0
Run Code Online (Sandbox Code Playgroud)

所需输出

>>tagged_document[0]
>>TaggedDocument(words=['battery', 'comprising', 'interior', 'battery', 'active', 'elements', 'battery', 'cell', 'casing', 'said', 'cell', 'casing', 'comprising', 'first', 'casing', 'element', 'first', 'contact', 'surface', 'second', 'casing', 'element', 'second', 'contact', 'surface', 'wherein', 'assembled', 'position', 'first', 'second', 'contact', 'surfaces', 'contact', 'first', 'second', …
Run Code Online (Sandbox Code Playgroud)

python gensim dask doc2vec

2
推荐指数
1
解决办法
1335
查看次数

标签 统计

dask ×2

python ×2

doc2vec ×1

gensim ×1

pandas ×1

parallel-processing ×1