首页 > 解决方案 > 将 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 不太擅长,并且无法找出正确的语法。

任何帮助完成这项工作将不胜感激!

标签: python-3.xregexpandas

解决方案


您可以使用

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 组:四位数
  • \)- 一个)字符。

推荐阅读