我有一个包含列df‘’gravidityAndParity‘的dataframe,它包含如下字符串值:
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
我使用regex定义了一个函数来执行此操作,但该函数不能正常工作。
到目前为止,我的代码如下:
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’中,有什么帮助吗?
发布于 2021-10-22 14:09:11
您可以在Series.str.extract
中使用内置的re
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中(“奇偶校验”列)。
https://stackoverflow.com/questions/69678247
复制相似问题