假设我有一个类似下面的DataFrame:
import pandas as pd
import numpy as np
raw = {"a": ['123@abc#010', 'N_23xdbqwierj#23' , 'adfhN_21ejrn#17eh']}
df = pd.DataFrame(raw)
我想做的结果是3种不同类型的列,
首先是提取位于“ @”前面的数值(不考虑长度)
第二个是提取位于“#”后面的数字值(不考虑长度)
第三步是提取数字值和位于“ _”两侧的字符(数字值与长度无关,但字符只是一个字母)
以下是我要制作的结果。我该如何实现?
extract_result = pd.DataFrame({"a": ['123@abc#010', 'N_23xdbqwierj#23' , 'adfhN_21ejrn#17eh'],
"Front@": ['123', '', ''],
"#Befind": ['010', '23', '17'],
"Both side_": ['', 'N23', 'N21']})
答案 0 :(得分:0)
尝试一下:
df['Front@'] = df.a.str.extract(r'(\d+)(?=@)')
df['#Befind'] = df.a.str.extract(r'(?<=#)(\d+)')
df['Both side_'] = df.a.str.extract('([a-zA-Z])(?=\_)')+df.a.str.extract('(?<=_)(\d+)')
df.fillna('', inplace=True)
df
# a Front@ #Befind Both side_
#0 123@abc#010 123 010
#1 N_23xdbqwierj#23 23 N23
#2 adfhN_21ejrn#17eh 17 N21