[英]Use python regex to replace dataframe column values with decimal part of string
我有一个包含 df['gravidityAndParity'] 列的数据框,其中包含如下字符串值:
0 g4p3
1 g2p0
2 g7p2
3 g2p0
4 g7p6
“g”后面的数字是重力,“p”后面的数字是奇偶校验。 我试图将此列拆分为两列: df['gravidity'] 和 df['parity]
所以我追求的输出是:
print(df['gravidity'])
0 4
1 2
2 7
3 2
4 7
print(df['parity])
0 3
1 0
2 2
3 0
4 6
我使用正则表达式定义了一个函数来执行此操作,但该函数无法正常工作。
到目前为止,这是我的代码:
import regex as re
# Function to clean the names
def Split_gravidity_parity(gravidityAndParity):
match_gravidity = re.search('g(\d+)', gravidityAndParity)
if match_gravidity:
df['gravidity']= match_gravidity.group(1)
match_parity = re.search('p(\d+)', gravidityAndParity)
if match_parity:
df['parity']= match_parity.group(1)
将函数应用于列:
df['gravidityAndParity'].apply(Split_gravidity_parity)
print(df['gravidity'])
0 4
1 4
2 4
3 4
4 4
print(df['parity'])
0 3
1 3
2 3
3 3
4 3
该函数似乎部分工作,因为它似乎只应用于列“g4p3”中的第一个值。
关于如何正确地对列中的所有值实现此正则表达式函数并在两个新列“gravidity”和“parity”中输出结果的任何帮助?
您可以将内置re
与Series.str.extract
一起Series.str.extract
:
import pandas as pd
df=pd.DataFrame({'gravidityAndParity':['g4p3','g2p0','g7p2','g2p0','g7p6']})
df[['gravity','parity']] = df['gravidityAndParity'].str.extract(r'g(\d+)p(\d+)')
# => >>> df
# gravidityAndParity gravity parity
# 0 g4p3 4 3
# 1 g2p0 2 0
# 2 g7p2 7 2
# 3 g2p0 2 0
# 4 g7p6 7 6
g(\\d+)p(\\d+)
模式将g
之后的一位或多位数字捕获到组 1(“重力”列)并匹配p
,然后将一位或多位数字捕获到组 2(“奇偶校验”列)中.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.