Pandas 根据一个词在另一个词中的出现情况创建新列
我有 一列10k行长。每列包含['PDF'、'ZIP'、'HTML'中的一列]。文本中每个条目的最大长度为14个字符 如何获得: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'),但不知道如何将所有条目缝合在一起,以测试并返回列中每一行的正确值 有什么
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