Pandas 根据一个词在另一个词中的出现情况创建新列

Pandas 根据一个词在另一个词中的出现情况创建新列,pandas,dataframe,substring,Pandas,Dataframe,Substring,我有 一列10k行长。每列包含['PDF'、'ZIP'、'HTML'中的一列]。文本中每个条目的最大长度为14个字符 如何获得: pd.DataFrame({'text':['fewfwePDFerglergl','htrZIPg','gemlHTML']}) text 0 wePDFerglergl 1 htrZIPg 2 gemlHTML 我尝试了df.text[0]。为单个条目查找('ZIP'),但不知道如何将所有条目缝合在一起,以测试并返回列中每一行的正确值 有什么

我有

一列10k行长。每列包含['PDF'、'ZIP'、'HTML'中的一列]。文本中每个条目的最大长度为14个字符

如何获得:

pd.DataFrame({'text':['fewfwePDFerglergl','htrZIPg','gemlHTML']})
    text
0   wePDFerglergl
1   htrZIPg
2   gemlHTML
我尝试了
df.text[0]。为单个条目查找('ZIP')
,但不知道如何将所有条目缝合在一起,以测试并返回列中每一行的正确值

有什么建议吗?

我们可以在这里将regex标志用于区分大小写的
(?i)

或者我们使用
flags=re.IGNORECASE
参数:

words =  ['pdf','zip','html']
df['file_type'] = df['text'].str.extract(f'(?i)({"|".join(words)})')
输出

import re
df['file_type'] = df['text'].str.extract(f'({"|".join(words)})', flags=re.IGNORECASE)

如果您想将
文件类型
作为小写,请链接:

详细信息: 管道(
|
)是正则表达式中的
运算符。因此:

                text file_type
0  fewfwePDFerglergl       pdf
1            htrZIPg       zip
2           gemlHTML      html
我们在伪代码中得到以下内容:

从字符串中提取“pdf”或“zip”或“html”


您可以使用正则表达式来执行以下操作:

"|".join(words)

'pdf|zip|html'
这将匹配任何所需的子字符串。要在适当的情况下按顺序提取这些匹配项,请使用一行代码:

import re
regex = re.compile(r'(PDF|ZIP|HTML)')
这将返回以下列表:

file_type = [re.search(regex, x).group().lower() for x in df['text']]
然后添加列:

['pdf', 'zip', 'html']
import re
regex = re.compile(r'(PDF|ZIP|HTML)')
file_type = [re.search(regex, x).group().lower() for x in df['text']]
['pdf', 'zip', 'html']
df['file_type'] = file_type