首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构造复杂的函数来应用于熊猫df的col?

如何构造复杂的函数来应用于熊猫df的col?
EN

Stack Overflow用户
提问于 2020-11-01 01:41:54
回答 1查看 54关注 0票数 0

我有一只很大(>500k行)的熊猫,就像这样

orig_df = pd.DataFrame(columns=list('id', 'free_text1', 'something_inert', 'free_text2'))

free_textX是一个字符串字段,包含从csv导入的用户输入。我们的目标是有一个函数func,它对free_textX的每一行进行各种检查,然后根据另一个df引用的内容执行Levenshtein模糊文本识别。就像这样

代码语言:javascript
复制
from rapidfuzz import process
LEVENSHTEIN_DIST = 25

def func(s) -> str:
  if string == "25":
    return s
  elif s == "nothing":
    return "something"
  else:
    s2 = process.extractOne(
           query = s,
           choices = reference['col_name'],
           score_cutoff = LEVENSHTEIN_DIST
           )
    return s2

在此过程之后,必须在名为recog_textXfree_textX之后插入一个新列,其中包含从func返回的值。

我尝试了矢量化(为了提高性能),如下所示

代码语言:javascript
复制
orig_df.insert(loc=new_col_index, #calculated before
               column='recog_textX',
               value=func(orig_df['free_textX'])
               )

def func(series) -> pd.core.series.Series:
  ...

但是我不明白如何构造func (根据矢量化的需要,将整个df col作为一个序列来处理,对吧?)因为process.extractOne(...) -> str处理单个strs而不是一系列strs。对我来说,这些接口概念似乎不相容。但出于性能原因,我确实希望在这里避免经典的迭代。我在这里对熊猫的了解太浅了。帮我一把?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-01 04:39:38

我可能漏掉了一点,但您可以使用apply函数来获得我认为您想要的东西:

代码语言:javascript
复制
orig_df['recog_textX'] = orig_df['free_textX'].apply(func)

这将通过将函数func应用于'free_textX‘列的每个元素来创建一个新的列’free_textX‘。

如果我误解了你的问题,请告诉我

顺便说一句,我认为向量化这个操作在速度上不会有什么不同,因为func()的每个应用程序都是一个复杂的字符串操作。但是它看起来确实比仅仅通过行循环要好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64624710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档