第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

卡住了 ForLoop 并插入 DataFrame

卡住了 ForLoop 并插入 DataFrame

PIPIONE 2023-10-06 16:44:57
我有這個數(shù)據(jù)框:    manufacturer    description0   toyota          toyota, gmc 10 years old.1   NaN             gmc, Motor runs and drives good.2   NaN             Motor old, in pieces.3   NaN             2 owner 0 rust. Cadillac.我想用從描述中獲取的關(guān)鍵字填充 NaN 值。為此,我創(chuàng)建了一個包含我想要的關(guān)鍵字的列表:keyword = ['gmc', 'toyota', 'cadillac']最后,我想循環(huán) DataFrame 中的每一行。將內(nèi)容從每行的“描述”列中拆分出來,如果該單詞也在“關(guān)鍵字”列表中,則將其添加到“制造商”列中。例如,它看起來像這樣:    manufacturer    description0   toyota          toyota, gmc 10 years old.1   gmc             gmc, Motor runs and drives good.2   NaN             Motor old, in pieces.3   cadillac        2 owner 0 rust. Cadillac.感謝這個社區(qū)中的一位友好的人,我可以將我的代碼改進為:import rekeyword = ['gmc', 'toyota', 'cadillac']bag_of_words = []for i, description in enumerate(test3['description']):bag_of_words = re.findall(r"""[A-Za-z\-]+""", test3["description"][i])for word in bag_of_words:     if word.lower() in keyword:            test3.loc[i, 'manufacturer'] = word.lower()但我意識到第一行也改變了值,即使它不是 NaN:  manufacturer  description0   gmc         toyota, gmc 10 years old.1   gmc         gmc, Motor runs and drives good.2   NaN         Motor old, in pieces.3   cadillac    2 owner 0 rust. Cadillac.我只想更改 NaN 值,但是當(dāng)我嘗試添加時:if word.lower() in keyword and test3.loc[i, 'manufacturer'] == np.nan:它沒有任何效果。
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

這是一個快速修復(fù)。你做錯了幾件事:

  • 混淆了描述索引和描述本身(通過 解決enumerate())。

  • bag_of_words應(yīng)該對每個單詞進行更新,而不是附加。

  • 正在迭代錯誤的項目(應(yīng)該是word,不是bag_of_words)。

如果選擇直觀/常規(guī)的名稱,則可以很容易地看出一些錯誤。一定要花一些時間在這上面。

代碼

from nltk.tokenize import RegexpTokenizer


# test3 = the main dataset

keyword = ['gmc', 'toyota', 'cadillac']


tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')


for i, description in enumerate(test3['description']):

    bag_of_words = tokenizer.tokenize(description.lower())

    for word in bag_of_words:

        if word in keyword:

            test3.loc[i, 'manufacturer'] = word

輸出:


test3

Out[31]: 

  manufacturer                       description

0       toyota             toyota, 10 years old.

1          gmc  gmc, Motor runs and drives good.

2          NaN             Motor old, in pieces.

3     cadillac         2 owner 0 rust. Cadillac.

通過 RegexpTokenizer 進行 re.findall()

我個人認為nltk是一個需要導(dǎo)入、安裝和部署的比較重的模塊。如果只進行字符串分割,我建議使用re.findall來提取有效的單詞模式。例如:


import re


# won't extract numbers, currency signs and apostrophes

re.findall(r"""[A-Za-z\-]+""", test3["description"][3])


# the output is much cleaner than before

Out[39]: ['owner', 'rust', 'Cadillac']

但這取決于用戶根據(jù)整個任務(wù)的選擇。


查看完整回答
反對 回復(fù) 2023-10-06
  • 1 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號