[英]Extract integer in a filename from complete path using split regex in Pandas
给定一个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)
但是,似乎什么都没有被分割。 我可以知道哪些参数设置不正确吗?
您可以使用Series.str.extract
:
df['num'] = df['f'].str.extract(r'_(\d+)\.[^.]+$', expand=False)
详情:
_
- 下划线(\d+)
- 捕获组 1(这是Series.str.extract
返回的值):一位或多位数字\.
- 一个.
字符[^.]+
- 除了 a 之外的一个或多个字符.
字符$
- 字符串结尾蟒蛇测试:
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
假设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+)\.[^.]+$')
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.