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部分?