仅在pandas列中的文件名中找到变量数字数据,并在新列中放置数字

问题描述 投票:0回答:1

我正在使用此代码来提取两个具有相似命名约定的CSV,将它们的文件名放在“文件”列中,并将数据帧连接到一个称为NatHrs的数据帧中。

import glob
from pathlib import Path

path = r'C:\Users\ThisUser\Desktop\AC Mbr Analysis'
all_files = glob.glob(path + '\\Natl_hours_YTD_OC_*.csv')

Nat_dfs = []
for file in all_files:
    df = pd.read_csv(file, index_col=None, encoding='windows-1252', header=1 )
    df['File'] = file
    Nat_dfs.append(df)

NatHrs = pd.concat(Nat_dfs)

[现在,我想获取“文件”列,该列返回一个文件名对象,其条目类似于“ C:\ Users \ ThisUser \ Desktop \ AC Mbr Analysis \ Natl_hours_YTD_OC_2018-2019”,仅提取文件名的末尾- -在这种情况下为“ 2018-2019”-并将这些角色放入新的栏目“计划年”中,以反映条目“ 2018-2019”。我在处理字符串或系列方面没有成功-我应该使用path.replace吗?我迷路了。当我描述该列时,我想解析...

NatHrs['File'].describe

...我明白了:

Name: File, dtype: object>
python pandas path filenames csvreader
1个回答
0
投票

您可以使用正则表达式在字符串中查找子字符串:

import re

string = r"C:\Users\ThisUser\Desktop\AC Mbr Analysis\Natl_hours_YTD_OC_2018-2019"
short = string.split('\\')[-1]

substring = re.search('\d+[-]*\d+',short).group()
print(substring)

可能想详细说明模式如何变化。会永远是“年”吗?可以只是“年份”吗?然后可能必须更改正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.