我有一個資料集,我想在其中創建一個從現有列之一派生的新列。新列是通過取第一個冒號之后的值創建的,不包括最后一個冒號。
資料
site stat crate
JJ - site 1 ok JD1:0055:AB5.30:100
JJ - site 1 ok JD1:00AB:AB5.30:111
J1 - site 2 fail JD1:00AA:AB5.30:200
JJ - site 1 ok JD1:00A:AB5.30:555
CC - site 8 fail CC5:01AAA:BA8.40:777
期望的
site stat main_cr crate
JJ - site 1 ok 0055:AB5.30 JD1:0055:AB5.30:100
JJ - site 1 ok 00AB:AB5.30 JD1:00AB:AB5.30:111
J1 - site 2 fail 00AA:AB5.30 JD1:00AA:AB5.30:200
JJ - site 1 ok 00A:AB5.30 JD1:00A:AB5.30:555
CC - site 8 fail 01AAA:BA8.40 CC5:01AAA:BA8.40:777
正在做
df['main_cr']=df['crate'].str.extract(r':(\d):.*):')
我已經閱讀了檔案,但在提取步驟的位置上有點卡住任何建議都是有幫助的,謝謝。
uj5u.com熱心網友回復:
我認為你可以得到你這樣描述的結果:
df['main_cr']=df['crate'].str.extract(r':(.*):')
因為.*是貪心的,它會匹配:除第一個和最后一個字符之外的所有字符。
輸入:
site stat crate
0 a ok JD1:0055:AB5.30:100
1 b ok JD1:00AB:AB5.30:111
2 c fail JD1:00AA:AB5.30:200
3 d ok JD1:00A:AB5.30:555
4 e fail CC5:01AAA:BA8.40:777
輸出:
site stat crate main_cr
0 a ok JD1:0055:AB5.30:100 0055:AB5.30
1 b ok JD1:00AB:AB5.30:111 00AB:AB5.30
2 c fail JD1:00AA:AB5.30:200 00AA:AB5.30
3 d ok JD1:00A:AB5.30:555 00A:AB5.30
4 e fail CC5:01AAA:BA8.40:777 01AAA:BA8.40
完整的測驗代碼:
import pandas as pd
df = pd.DataFrame({
'site':['a','b','c','d','e'],
'stat':['ok','ok','fail','ok','fail'],
'crate':['JD1:0055:AB5.30:100','JD1:00AB:AB5.30:111','JD1:00AA:AB5.30:200','JD1:00A:AB5.30:555','CC5:01AAA:BA8.40:777']
})
df['main_cr']=df['crate'].str.extract(r':(.*):')
uj5u.com熱心網友回復:
您可以考慮使用str.replace正則運算式,^[^:] :即從頭到尾洗掉所有內容:
df['crate'].str.replace('^[^:] :|:[^:] $', '', regex = True)
0 0055:AB5.30
1 00AB:AB5.30
2 00AA:AB5.30
3 00A:AB5.30
4 01AAA:BA8.40
Name: crate, dtype: object
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488939.html
上一篇:將兩個NumPy陣列合并為一個
