給定一個df
df=pd.DataFrame(['/home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__131147.png',
'/home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__160565.png'])
我只想提取檔案擴展名之前的整數。
下面的代碼應該回答上述目標
df['fname'] =df[0].apply(lambda x : os.path.split(x)[1])
df['f'] =df['fname'].apply(lambda x : x.split('__')[1].split('.png')[0])
df['f']=df['f'].astype(int)
但是,我覺得這可以使用 pandas 內置輕松實作split,如下所示
df['f']=df[0].str.split(re.compile(r"__\d.jpg"), expand=True)
但是,似乎什么都沒有被分割。我可以知道哪些引數設定不正確嗎?
uj5u.com熱心網友回復:
您可以使用Series.str.extract:
df['num'] = df['f'].str.extract(r'_(\d )\.[^.] $', expand=False)
在這里測驗你的正則運算式。
詳情:
_- 一個下劃線(\d )- 捕獲組 1(這是回傳的值Series.str.extract):一位或多位數字\.- 一個.字符[^.]- 除字符外的一個或多個.字符$- 字串結束
蟒蛇測驗:
import pandas as pd
df = pd.DataFrame({'f':['/home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__131147.png',
'/home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__160565.png']})
df['num'] = df['f'].str.extract(r'_(\d )\.[^.] $', expand=False)
print(df.to_string())
輸出:
f num
0 /home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__131147.png 131147
1 /home/dtest/Documents/user/exp/S1/test1/test3/sub5/file_2_F__160565.png 160565
uj5u.com熱心網友回復:
假設0您的列的名稱(如您的示例中所示),您可以使用str.extract:
df[0].str.extract(r'(\d )\.[^.] $', expand=False)
輸出:
0 131147
1 160565
Name: 0, dtype: object
要分配給新列:
df['f'] = df[0].str.extract(r'(\d )\.[^.] $')
正則運算式演示
uj5u.com熱心網友回復:
def extract(values):
values = values.split('__') # cut at '__'
return int(values[-1].replace('.png','')) # take the last part en replace the .png
df[0].apply(extract)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475200.html
