如何从DataFrame的单元格中提取几个“数值”?

时间:2019-11-27 00:18:05

标签: python pandas

假设我有一个类似下面的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']})

1 个答案:

答案 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