我有以下数据:
我想实现以下目标:
我尝试了什么
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
关于python - Pandas 如何通过正则表达式从列提取到多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73459174/