![](/img/trans.png)
[英]Check if a pandas.core.series.Series contains a specific string in Python
[英]Python Pandas: check if Series contains a string from list
我試圖確定Blaze[Info]
列是否在文本中包含來自列表的字符串(並使用該信息創建一個新的 Boolean 列)。
DataFrame 看起來像:
Word Info
0 Aam Aam, n. Etym: [D. aam, fr. LL. ama; cf. L. ham...
1 aard-vark Aard"-vark`, n. Etym: [D., earth-pig.] (Zoöl.)
2 aard-wolf Aard"-wolf`, n. Etym: [D, earth-wolf] (Zoöl.)
當我直接使用 state 這個詞時,我得到了我想要的答案:
Blaze['Noun'] = np.where((Blaze['Info'].str.contains('n.')),True,False)
Blaze['Verb'] = np.where((Blaze['Info'].str.contains('v.')),True,False)
Word Info Noun Verb
0 Aam Aam, n. Etym: [D. aam, fr. LL. ama; cf. L. ham... True False
1 aard-vark Aard"-vark`, n. Etym: [D., earth-pig.] (Zoöl.) True False
2 aard-wolf Aard"-wolf`, n. Etym: [D, earth-wolf] (Zoöl.) True False
但這不可擴展,因為我有 100 多個要搜索的功能。
當我遍歷列表abbreviation
時:
abbreviation=['n'., 'v.']
col_name=['Noun','Verb']
for i in range(len(abbreviation)):
Blaze[col_name[i]] = np.where((Blaze['Info'].str.contains(abbreviation[i])), True, False)
我被退回 DataFrame 充滿了'FALSE'條目:
Word Info Noun Verb
0 Aam Aam, n. Etym: [D. aam, fr. LL. ama; cf. L. ham... False False
1 aard-vark Aard"-vark`, n. Etym: [D., earth-pig.] (Zoöl.) False False
2 aard-wolf Aard"-wolf`, n. Etym: [D, earth-wolf] (Zoöl.) False False
我可以看到幾個做類似事情的答案,但將答案分組在一行中: 檢查 pandas 系列中的每一行是否包含使用應用的列表中的字符串?
str.contains 的可擴展解決方案,包含 pandas 中的字符串列表
但我認為這些不能解決上述問題。
有人能解釋我怎么錯了嗎?
您可以使用zip
同時遍歷列表。 確保將regex=False
傳遞給str.contains
as .
是一個正則表達式字符。
abbreviation=['n.', 'v.']
col_name=['Noun','Verb']
for a, col in zip(abbreviation, col_name):
Blaze[col] = np.where(Blaze['Info'].str.contains(a, regex=False),True,False)
Blaze
Out[1]:
Word Info Noun Verb
0 Aam Aam, n. Etym: [D. aam, fr. LL. ama; cf. L. ham... True False
1 aard-vark Aard"-vark`, n. Etym: [D., earth-pig.] (Zoöl.) True False
2 aard-wolf Aard"-wolf`, n. Etym: [D, earth-wolf] (Zoöl.) True False
如果需要, str.contains
也有一個case
參數,因此您可以指定case=False
以不區分大小寫搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.