Python 3.x 将excel文件名转换为数据框列
我有大约1500个excel文件,它们的格式类似。我需要清理和准备数据,以便将其纳入可视化工具。大部分清洁工作都很简单,我已经做好了。我现在正在处理一个文件,一旦完成,我将遍历所有文件Python 3.x 将excel文件名转换为数据框列,python-3.x,regex,pandas,Python 3.x,Regex,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 Dat
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、state和year,并将它们作为三个独立的列添加到数据框中。这是我拥有的文件的简短示例:
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+
的一个词的
一个或多个空格\s+
-第1组:除换行符以外的任何零个或多个字符,尽可能少(.*)
-用0+空格括起来的逗号\s*,\s*
-第2组:除换行符以外的任何零个或多个字符,尽可能少(.*)
-0+空格\s*
-a\(
字符(
-第3组:四位数字(\d{4})
-a\)
字符)
RTO=re.search('\s\sof\s(.*\s\,','文件名)
隔离RTO,并且我将
作为输出。如果您需要字符串值,请使用print(rto.group())
或print(rto.group(1))
您的正则表达式。尝试df[['RTO','State','Year']=df['Maker'].str.extract(r'\s+of\s(.*?\s*,\s*(.*?\s*)\((\d{4})\),expand=True)
。看,这就解决了,谢谢!哇,太简洁了!我写了6行代码,谢谢分享:)