我面临着从DataFrame列内的列表中找到子字符串的挑战
list =['ab', 'bc', 'ca']
DF1
Index|A
0 |ajbijio_ab_jadds
1 |bhjbj_ab_jiui
Expected OUTPUT:
DF
ab
ab
我写了一些东西,但是它给出了错误 不可散列的类型:“列表”
DF1['A'].str.lower().str.contains(list)
答案 0 :(得分:1)
使用str.extract
例如:
import pandas as pd
lst =['ab','bc','ca']
df = pd.DataFrame({"A": ["ajbijio_ab_jadds", "bhjbj_ab_jiui", "Hello World"]})
df["Found"] = df["A"].str.extract("(" + "|".join(lst) + ")")
print(df)
输出:
A Found
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
2 Hello World NaN
答案 1 :(得分:1)
如果只需要与join
的{{1}}列表中的正则表达式|
首先匹配,请使用Series.str.extract
:
OR
如果需要所有匹配项,请将Series.str.findall
与Series.str.join
结合使用:
L =['ab','bc','ca']
df['new'] = df['A'].str.extract('('+ '|'.join(L) + ')')
print (df)
A new
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
答案 2 :(得分:1)
我正在使用findall
df["Found"] = df["A"].str.findall("|".join(lst)).str[0]
df
Out[82]:
A Found
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
2 Hello World NaN