从自定义文本字段中提取年份和月份

时间:2019-04-14 15:17:10

标签: python pandas dataframe series

我有一个带有一栏的数据框,其中包含有关该人在该组织中拥有帐户的年/月数的信息。

该字段是自定义文本格式,

  

例如:“ 0yrs 11mon”,“ 15yrs 4mon”等。

有没有一种方法可以将年和月提取到单独的列中,如下所示:

Member Since | Year | Mon
-------------------------

'0yrs 11mon' | 0 | 11 
-------------------------------------------

'15yrs 4mon' | 15 | 4
---------------------

5 个答案:

答案 0 :(得分:6)

您可以使用Series.str.extract

df['Year'] = df['Member Since'].str.extract('(\d+)(?:yrs)')
df['Mon'] = df['Member Since'].str.extract('(?:\s)(\d+)(?:mon)')

?:是非捕获组符号。这意味着它与正则表达式匹配,但不会捕获到输出中

您也可以尝试Series.str.extractall

df[['year','mon']]= df['Member Since'].str.extractall('(\d+)').unstack()
df
  Member Since  year    mon
0   0yrs 11mon   0      11
1   15yrs 4mon   15      4

extractall函数实际上返回一个DataFrame,其中每个匹配项包含一行,而每个组则包含一列,因此您需要对其进行拆栈。

  

仅当您有问题中显示的数字时,才使用全部提取方法。大于或小于两个将返回错误。

答案 1 :(得分:2)

使用str.extract解决方案的正则表达式替代方案是

df["Year"] = df["Member Since"].str.extract("(\d+)yrs")
df["Mon"] = df["Member Since"].str.extract("(\d+)mon")

答案 2 :(得分:0)

如果您的数据在excel中,则可能会起作用:-

import pandas as pd
data=pd.read_excel('filename')
month=data['Mon']  
year=data['Year']

答案 3 :(得分:0)

df[['year', 'month']] = df['Member Since'].str.split(' ').apply(lambda x: [''.join(re.findall(r'\d',i)) for i in x]).apply(pd.Series)

输出

  Member Since year month
0   0yrs 11mon    0    11
1   15yrs 4mon   15     4

答案 4 :(得分:0)

使用str.findall

pd.DataFrame(df['Member Since'].str.findall('\d+').tolist(),columns=['Year','Mon'])
  Year Mon
0    0  11
1   15   4