如何在熊猫中做到这一点:
我extract_text_features在单个文本列上有一个函数,返回多个输出列。具体来说,该函数返回 6 个值。
extract_text_features
该函数有效,但是似乎没有任何正确的返回类型(pandas DataFrame/numpy array/Python 列表),以便可以正确分配输出df.ix[: ,10:16] = df.textcol.map(extract_text_features)
df.ix[: ,10:16] = df.textcol.map(extract_text_features)
所以我想我需要回到迭代df.iterrows(),按照这个?
df.iterrows()
更新:迭代df.iterrows()至少慢 20 倍,所以我放弃并将函数拆分为六个不同的.map(lambda ...)调用。
.map(lambda ...)
更新 2:在可用性得到改进或添加到 v0.16之前,这个问题被问到 v0.11.0 左右。因此,许多问题和答案都不太相关。df.applydf.assign()
df.apply
df.assign()
根据 user1827356 的答案,您可以使用以下方法一次性完成作业df.merge:
df.merge
df.merge(df.textcol.apply(lambda s: pd.Series({'feature1':s+1, 'feature2':s-1})), left_index=True, right_index=True) textcol feature1 feature2 0 0.772692 1.772692 -0.227308 1 0.857210 1.857210 -0.142790 2 0.065639 1.065639 -0.934361 3 0.819160 1.819160 -0.180840 4 0.088212 1.088212 -0.911788
编辑: 请注意巨大的内存消耗和低速:https ://ys-l.github.io/posts/2015/08/28/how-not-to-use- pandas-apply/ !