Python 如何提取多个';数值';从数据帧的单元?

Python 如何提取多个';数值';从数据帧的单元?,python,pandas,Python,Pandas,假设我有一个如下所示的数据帧: import pandas as pd import numpy as np raw = {"a": ['123@abc#010', 'N_23xdbqwierj#23' , 'adfhN_21ejrn#17eh']} df = pd.DataFrame(raw) 我想做的结果是3种不同类型的列 首先是提取位于“@”前面的数值(不考虑长度) 第二个是提取位于“#”(不考虑长度)后面的数值 第三种方法是提取位于“_”两侧的数值和字符(数值与长度无关,但字符仅为一

假设我有一个如下所示的数据帧:

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']})
试试这个:

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
df['Front@']=df.a.str.extract(r'(\d+)(=@'))
df['#Befind']=df.a.str.extract(r'(?试试这个:

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
df['Front@']=df.a.str.extract(r'(\d+)(=@'))

df['#Befind']=df.a.str.extract(r'(?嘿,一些问题;你想从符号中提取的东西,它们总是在同一个结构中吗?或者会有例如123a@然后你只得到123部分吗?嘿,一些问题;你想从符号中提取的东西,它们总是在同一个结构中吗?或者会有例如123a@然后你只得到123部分?