![](/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.