【发布时间】:2021-05-26 16:04:28
【问题描述】:
我有大约 1500 个格式类似的 excel 文件。我需要清理和准备要摄取到可视化工具中的数据。大部分清洁工作都很容易,我已经处理好了。我现在正在处理一个文件,完成后我将遍历所有文件。
import pandas as pd
import os
userhome = os.path.expanduser('~/')
path_to_file = userhome + 'Downloads/arunachal-pradesh/'
file_name = 'Maker Month Wise Data of WEST KAMENG - AR4 , Arunachal Pradesh (2020).xlsx'
df = pd.read_excel(path_to_file + file_name)
df.columns = df.iloc[2]
df = df.drop(df.index[0:3])
df = df.iloc[:,1:14]
df.rename(columns={df.columns[0]: "Maker"}, inplace = True)
df.head(30)
这会输出一个如下所示的数据框:
现在我的挑战是我需要使用文件名来提取 3 个数据点 - RTO、州和年份,并将它们添加为数据框中的三个单独的列。这是我拥有的文件的简短示例:
Maker Month Wise Data of WEST KAMENG - AR4 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of UPPER SIANG - AR14 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of TIRAP - AR13 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of CHANGLANG - AR12 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of UPPER SUBANSIRI - AR7 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of KURUNG KUMEY - AR15 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of ITANAGAR CAPITAL COMPLEX - AR1 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of TAWANG - AR3 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of LOWER DIBANG VALLEY - AR16 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of LOWER SUBANSIRI - AR6 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of KAMLE - AR23 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of YUPIA - AR2 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of EAST SIANG - AR9 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of EAST KAMENG - AR5 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of LOHIT - AR11 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of NAMSAI - AR20 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of SHI-YOMI - AR26 , Arunachal Pradesh (2020).xlsx
Maker Month Wise Data of WEST SIANG - AR8 , Arunachal Pradesh (2020).xlsx
如您所见,它们的格式相似。 RTO 是介于“of”和逗号之间的所有内容。因此,对于第一个文件,RTO 将是WEST KAMENG - AR4。这些文件的状态是Arunachal Pradesh,但它会在完整的文件列表中发生变化。年份是2020。
我一直在尝试使用 regex101 来捕获这些参数,但我对 regex 不太擅长,并且无法找出正确的语法。
我们将不胜感激!
【问题讨论】:
-
您说“我一直在尝试使用 regex101 来捕获这些参数”,请显示您尝试的模式并解释结果有什么问题。
-
例如,我现在正尝试使用
rto = re.search('\s\sof\s(.*)\s\,', filename)隔离RTO,我得到<re.Match object; span=(21, 44), match=' of CHANGLANG - AR12 ,'>作为输出。不知道我做错了什么 -
如果需要字符串值,使用
print(rto.group())或print(rto.group(1)) -
你的正则表达式looks quite fine。试试
df[['RTO','State','Year']] = df['Maker'].str.extract(r'\s+of\s(.*?)\s*,\s*(.*?)\s*\((\d{4})\)', expand=True)。见the regex demo。 -
解决了,谢谢!
标签: python-3.x regex pandas