在 pandas 数据框中使用正则表达式提取和替换子字符串
extracting and replacing substring using regex in a pandas dataframe
我有这个:
Title
Num
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span>
1 <span class="o-label--tiny">PROTÉINES</span>
2 <span class="o-label--tiny">GLUCIDES</span>
<class 'pandas.core.frame.DataFrame'> Num Index(['Title'], dtype='object')
这就是我想要的:
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
这是我开发的正则表达式:
(<span class=\"o-label--tiny\">)([a-zA-Z]+\s*\w*)(</span>)
测试它我发现它匹配整个初始字符串并且有不同子字符串的组。最后,我想要 group(2) 在我的数据框列中。 (我下面的示例显示了显式正则表达式,但我也尝试了这些 re.compile 结果,这也无法让我得到我的最终结果)。
这是我试过的:
df['Title'] = df['Title'].replace({'<span class=\"o-label--tiny\">': ''}, inplace=True, regex=True)
结果:
Title
Num
0 None
1 None
2 None
尝试数字 2:
df['Title'] = df['Title'].str.replace('<span class=\"o-label--tiny\">', repl = '')
结果编号 2:
Title
Num
0 NaN
1 NaN
2 NaN
尝试数字 3:
df['Title'] = df[lambda df: df.columns[0]].str.extract('(>[a-zA-Z]+\s*\w*)', expand=False)
结果 3:
Title
Num
0 NaN
1 NaN
2 NaN
我真的看不出我做错了什么,如果能帮助我达到我想要的结果,我们将不胜感激。谢谢!
使用str.extract
:
df['Title']=df['Title'].str.extract('<span class=\"o-label--tiny\">(.*)</span>',expand=False)
print (df)
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
如果可能不同 tag
s 或 class
es:
df['Title'] = df['Title'].str.extract('>(.*)<',expand=False)
print (df)
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
正则表达式
我不想输入 df 东西,但我希望这有用:
import re
stringa = """
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span>
1 <span class="o-label--tiny">PROTÉINES</span>
2 <span class="o-label--tiny">GLUCIDES</span>
"""
pattern1 = "[0-9]"
pattern = ">(.*)<"
found = re.findall(pattern1, stringa)
found2 = re.findall(pattern, stringa)
for f in range(len(found)):
print(found[f] + " " + found2[f])
output
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
我有这个:
Title
Num
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span>
1 <span class="o-label--tiny">PROTÉINES</span>
2 <span class="o-label--tiny">GLUCIDES</span>
<class 'pandas.core.frame.DataFrame'> Num Index(['Title'], dtype='object')
这就是我想要的:
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
这是我开发的正则表达式:
(<span class=\"o-label--tiny\">)([a-zA-Z]+\s*\w*)(</span>)
测试它我发现它匹配整个初始字符串并且有不同子字符串的组。最后,我想要 group(2) 在我的数据框列中。 (我下面的示例显示了显式正则表达式,但我也尝试了这些 re.compile 结果,这也无法让我得到我的最终结果)。
这是我试过的:
df['Title'] = df['Title'].replace({'<span class=\"o-label--tiny\">': ''}, inplace=True, regex=True)
结果:
Title
Num
0 None
1 None
2 None
尝试数字 2:
df['Title'] = df['Title'].str.replace('<span class=\"o-label--tiny\">', repl = '')
结果编号 2:
Title
Num
0 NaN
1 NaN
2 NaN
尝试数字 3:
df['Title'] = df[lambda df: df.columns[0]].str.extract('(>[a-zA-Z]+\s*\w*)', expand=False)
结果 3:
Title
Num
0 NaN
1 NaN
2 NaN
我真的看不出我做错了什么,如果能帮助我达到我想要的结果,我们将不胜感激。谢谢!
使用str.extract
:
df['Title']=df['Title'].str.extract('<span class=\"o-label--tiny\">(.*)</span>',expand=False)
print (df)
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
如果可能不同 tag
s 或 class
es:
df['Title'] = df['Title'].str.extract('>(.*)<',expand=False)
print (df)
Title
Num
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES
正则表达式
我不想输入 df 东西,但我希望这有用:
import re
stringa = """
0 <span class="o-label--tiny">VALEUR ÉNERGÉTIQUE</span>
1 <span class="o-label--tiny">PROTÉINES</span>
2 <span class="o-label--tiny">GLUCIDES</span>
"""
pattern1 = "[0-9]"
pattern = ">(.*)<"
found = re.findall(pattern1, stringa)
found2 = re.findall(pattern, stringa)
for f in range(len(found)):
print(found[f] + " " + found2[f])
output
0 VALEUR ÉNERGÉTIQUE
1 PROTÉINES
2 GLUCIDES