如何查找列表是否为“数据帧”列中字符串的子字符串?

时间:2019-04-22 12:54:57

标签: python-3.x pandas dataframe

我面临着从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)

3 个答案:

答案 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.findallSeries.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