【发布时间】:2013-04-20 15:24:56
【问题描述】:
如何在熊猫中做到这一点:
我在单个文本列上有一个函数extract_text_features,返回多个输出列。具体来说,该函数返回 6 个值。
该函数有效,但似乎没有任何正确的返回类型(pandas DataFrame/numpy array/Python 列表)以便输出可以正确分配df.ix[: ,10:16] = df.textcol.map(extract_text_features)
所以我认为我需要退回到使用df.iterrows() 进行迭代,就像this 一样?
更新:
使用 df.iterrows() 进行迭代至少慢了 20 倍,所以我放弃并将函数拆分为六个不同的 .map(lambda ...) 调用。
更新 2:在 df.apply 可用性得到改进或 df.assign() 为 added in v0.16 之前,这个问题在 v0.11.0 周围被问到。因此,很多问题和答案都不太相关。
【问题讨论】:
-
我不认为你可以按照你写的方式做多个作业:
df.ix[: ,10:16]。我认为您必须将merge您的特征添加到数据集中。 -
对于那些想要性能更高的解决方案check this one below 的人不使用
apply -
大多数使用 pandas 的数值运算都可以向量化——这意味着它们比传统迭代要快得多。 OTOH,某些操作(例如字符串和正则表达式)本质上很难矢量化。在这种情况下,了解 如何 循环数据非常重要。有关何时以及如何循环数据的更多信息,请阅读For loops with Pandas - When should I care?。
-
@coldspeed:主要问题不是在几个选项中选择哪个性能更高,而是在与 pandas 语法进行斗争以使其完全正常工作,回到 v0.11.0。
-
确实,该评论是为正在寻找迭代解决方案的未来读者准备的,他们要么不知道更好,要么知道自己在做什么。
标签: python pandas merge multiple-columns return-type