2017-07-27 70 views
2

我想提高我的代碼的性能替代他們,我要來標記一個數據幀的2列,我是有這樣的熊貓適用於2列和一行

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方法。

回答

1

您可以簡單地使用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 nltk 
df = 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      B 
0 [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] 
+0

它是否工作嗎? @ set92 – Dark

+0

它給出了一個錯誤:TypeError :('期望的字符串或像字節的對象','發生在索引question1')。我想這是因爲nltk.word_tokenize(文本)需要接收你想要應用標記器的文本。 – set92

+0

@ set92更新我的答案希望它有幫助。 – Dark