python - Pandas 如何通过正则表达式从列提取到多行?

标签 python pandas replace split

我有以下数据:

<表类=“s-表”> <标题> ID 内容 日期 <正文> 1 2429(sach:MySpezialItem:16.59) 2022-04-12 2 2429(sach:第 13 项:18.59)(sach:这个和那个成本:16.59) 2022-06-12

我想实现以下目标:

<表类=“s-表”> <标题> ID 数字 价格 日期 <正文> 1 2429 2022-04-12 1 16.59 2022-04-12 2 2429 2022-06-12 2 18.59 2022-06-12 2 16.59 2022-06-12

我尝试了什么

df['sach'] = df['content'].str.split(r'\(sach:.*\)').explode('content')
df['content'] = df['content'].str.replace(r'\(sach:.*\)','', regex=True)

最佳答案

您可以使用单个正则表达式 str.extractall :

regex = r'(?P<number>\d+)\(|:(?P<price>\d+(?:\.\d+)?)\)'

df = df.join(df.pop('content').str.extractall(regex).droplevel(1))

注意。如果您想要一个新的 DataFrame,请不要 pop:

df2 = (df.drop(columns='content')
         .join(df['content'].str.extractall(regex).droplevel(1))
       )

输出:

   ID        date number  price
0   1  2022-04-12   2429    NaN
0   1  2022-04-12    NaN  16.59
1   2  2022-06-12   2429    NaN
1   2  2022-06-12    NaN  18.59
1   2  2022-06-12    NaN  16.59

regex demo

关于python - Pandas 如何通过正则表达式从列提取到多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73459174/

相关文章:

python - 从 html 模板生成 PDF 并在 Django 中通过电子邮件发送

python - 给定 4 个点,如何从 pytorch/torchvision 中的图像裁剪四边形?

java - Pyspark 中的广播加入得到 OnOutOfMemoryError

python - 如何根据字典键定义变量名?

python - 如何根据时间对齐数据?

javascript - 在 3 个不同的字符串之后和双引号之间替换字符串

regex - sed 替换文件名以引号开头

javascript - JS正则表达式替换两个字符或单词之间的句子

python - 分组并聚合列,但如果值不匹配则创建 NaN

python - 如何计算pandas中的日复利