我有一個包含 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”中輸出結果的任何幫助?
uj5u.com熱心網友回復:
您可以使用內置re有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 組(“奇偶校驗”列)中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334543.html
上一篇:從事件日志中決議FQDN和專案
下一篇:指定正則運算式組的結尾
