Pandas apply在两列上进行操作并在一行中替换它们

我正在尝试提高我的代码性能,我想对数据框的两列进行分词处理,之前我的代码是这样的

submission_df['question1'] = submission_df.apply(lambda row: nltk.word_tokenize(row['question1']), axis=1)submission_df['question2'] = submission_df.apply(lambda row: nltk.word_tokenize(row['question2']), axis=1)

我想也许我可以将它们合并在一行中,这样我只需遍历所有行一次(200万行),所以我想到了这样的代码

submission_df['question1'],submission_df['question2'] = submission_df.apply    (lambda row:      (nltk.word_tokenize(row['question1']),      nltk.word_tokenize(row['question2'])), axis=1)   

但这行不通,也许还有其他方法可以改进,而不仅仅是使用apply方法。


回答:

你可以简单地对选定的列使用apply方法,并使用astype(str),例如

submission_df[['question1','question2']]=submission_df[['question1','question2']].astype(str).apply(lambda row: [nltk.word_tokenize(row['question1']),nltk.word_tokenize(row['question2'])], axis=1)

示例:

import nltkdf = pd.DataFrame({"A":["Nice to meet you ","Nice to meet you ","Nice to meet you ",8,9,10],"B":[7,6,7,"Nice to meet you ","Nice to meet you ","Nice to meet you "]})df[['A','B']] = df[['A','B']].astype(str).apply(lambda row: [nltk.word_tokenize(row['A']),nltk.word_tokenize(row['B'])], axis=1)

输出:

                          A                      B0  [Nice, to, meet, you]                    [7]1  [Nice, to, meet, you]                    [6]2  [Nice, to, meet, you]                    [7]3                    [8]  [Nice, to, meet, you]4                    [9]  [Nice, to, meet, you]5                   [10]  [Nice, to, meet, you]

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注