python-3.x - 将 excel 文件名转换为 pandas 数据框列
问题描述
我有大约 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 不太擅长,并且无法找出正确的语法。
任何帮助完成这项工作将不胜感激!
解决方案
您可以使用
df[['RTO','State','Year']] = df['Maker'].str.extract(r'\s+of\s(.*?)\s*,\s*(.*?)\s*\((\d{4})\)', expand=True)
请参阅正则表达式演示。详情:
\s+
- 一个或多个空格of
- 一个字of
\s+
一个或多个空格(.*?)
- 第 1 组:除换行符之外的任何零个或多个字符尽可能少\s*,\s*
- 用 0+ 个空格括起来的逗号(.*?)
- 第 2 组:除换行符之外的任何零个或多个字符尽可能少\s*
- 0+ 个空格\(
- 一个(
字符(\d{4})
- 第 3 组:四位数\)
- 一个)
字符。
推荐阅读
- java - 使用java打印三角形时遇到问题
- java - 无法使用复选框选择填充字符串
- c - C - 带循环的多个子叉
- python - 防止两个人在共享驱动器上同时运行相同的程序
- postgresql - 加载具有依赖关系的 Postgres 函数
- python - 遗传算法 - 二维世界中的生物不学习
- elasticsearch - Linkedin WhereHows 安装的 elasticsearch 索引创建问题
- python - AttributeError:“NoneType”对象没有属性“get_text”python 2.7
- android - 从 Asset 获取文件大小
- python - Python - 水印叠加