siv*_*iva 4 python series dataframe pandas
我有一个带有一栏的数据框,其中包含有关此人在组织中有帐户的年/月数的信息。
该字段是自定义文本格式,
例如:“ 0yrs 11mon”,“ 15yrs 4mon”等。
有没有一种方法可以仅将年和月提取到单独的列中,如下所示:
Member Since | Year | Mon
-------------------------
'0yrs 11mon' | 0 | 11
-------------------------------------------
'15yrs 4mon' | 15 | 4
---------------------
Run Code Online (Sandbox Code Playgroud)
您可以使用Series.str.extract:
df['Year'] = df['Member Since'].str.extract('(\d+)(?:yrs)')
df['Mon'] = df['Member Since'].str.extract('(?:\s)(\d+)(?:mon)')
Run Code Online (Sandbox Code Playgroud)
这?:是非捕获组符号。这意味着它与正则表达式匹配,但不会在输出中捕获
您也可以尝试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
Run Code Online (Sandbox Code Playgroud)
extractall函数实际上返回一个DataFrame,其中每个匹配项包含一行,而每个组具有一行列,因此您需要对其进行拆栈。
仅当您有问题中显示的数字时,才使用全部提取方法。大于或小于两个将返回错误。