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

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

在 DataFrame 中添加 NaN 值時出現(xiàn)問題

在 DataFrame 中添加 NaN 值時出現(xiàn)問題

德瑪西亞99 2023-10-11 21:17:39
我有這個數(shù)據框:    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.我想用從描述中獲取的關鍵字填充 NaN 值。為此,我創(chuàng)建了一個包含我想要的關鍵字的列表:keyword = ['gmc', 'toyota', 'cadillac']最后,我想循環(huán) DataFrame 中的每一行。將內容從每行的“描述”列中拆分出來,如果該單詞也在“關鍵字”列表中,則將其添加到“制造商”列中。例如,它看起來像這樣:    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 值,但是當我嘗試添加時:if word.lower() in keyword and test3.loc[i, 'manufacturer'] == np.nan:它沒有任何效果。
查看完整描述

1 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

np.nan == np.nan是假的。也許有點違反直覺=)但這應該意味著最后一個條件永遠不應該生效。從你的問題中不清楚你是否看到相同的結果或沒有結果。


如果你改變了


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


for i, description in zip(test3.loc[test3['manufacturer'].isna(), :].index, test3.loc[test3['manufacturer'].isna(), 'description']):

那么我認為它應該可以正常工作。您只會獲得“制造商”為 NaN 的行。您也可以刪除該== np.nan部分,因為非空字符串的計算結果為 True,而 np.nan 的計算結果為 False,但這會使您的代碼更難理解。


有很多方法可以讓你的代碼看起來更好;)但是專注于學習調試,剩下的就會水到渠成。只要它能做你想做的事,誰在乎呢。


調試此問題的一種方法是打印循環(huán)內條件每個部分的真值。


print(bool(word.lower() in keyword))

print(bool(test3.loc[i, 'manufacturer'] == np.nan)

最好的祝愿!


編輯:好的,我可能應該添加我自己如何做到這一點。


df = pd.DataFrame({'manufacturer': ['toyota', np.nan, np.nan, np.nan],

                   'description': ['toyota, gmc 10 years old.', 'gmc, Motor runs and drives good.', 'Motor old, in pieces.', '2 owner 0 rust. Cadillac.']})

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

filler = df['description'].map(lambda s: [word for word in keyword if word in s.lower()][0] 

                                         if bool([word for word in keyword if word in s.lower()]) 

                                         else np.nan)

df['manufacturer'] = df['manufacturer'].fillna(filler)

當關鍵字中的最后一項或第一項出現(xiàn)在字符串中時,不確定您是否想要關鍵字中的最后一項或第一項。我使用索引 0 將其設置為此處的第一項。


查看完整回答
反對 回復 2023-10-11
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號