如何使用 Pandas 从 Excel 文件中提取日期?
先决条件: Python中的正则表达式
在本文中,让我们看看如何从 Excel 文件中提取日期。假设我们的 Excel 文件如下图所示,那么我们必须从字符串中提取日期并将其存储到新的 Dataframe 列中。
要查看 Excel 文件,请单击此处。
方法 :
- 导入所需的模块。
- 从 Excel 文件导入数据。
- 为新日期制作一个额外的列。
- 设置搜索索引。
- 定义日期格式的模式。
- 搜索日期并分配给 Dataframe 中的相应列。
让我们看看分步实施:
第一步:导入需要的模块并从Excel文件中读取数据。
Python3
# import required module
import pandas as pd;
import re;
# Read excel file and store in to DataFrame
data = pd.read_excel("date_sample_data.xlsx");
print("Original DataFrame")
data
Python3
# Create column for Date
data['new_Date']= None
data
Python3
# set required index
index_set = data.columns.get_loc('Description')
index_date = data.columns.get_loc('new_Date')
print(index_set, index_date)
Python3
# In DD/MM/YYYY
date_pattern = r'([0-9]{2}\/[0-9]{2}\/[0-9]{4})'
Python3
for row in range(0, len(data)):
Date = re.search(date_pattern,data.iat[row,index_set]).group()
data.iat[row, index_date] = Date
# show the Dataframe
data
Python3
# importing required module
import pandas as pd;
import re;
data = pd.read_excel("date_sample_data.xlsx");
print("Original data : \n",
data)
# Create column for Date
data['new_Date'] = None
# set index
index_set = data.columns.get_loc('Description')
index_date = data.columns.get_loc('new_Date')
print(index_set, index_date)
# define pattern for date
# in DD/MM/YYYY
date_pattern = r'([0-9]{2}\/[0-9]{2}\/[0-9]{4})'
# searching pattern
# And storing in to DataFrame
for row in range(0, len(data)):
Date = re.search(date_pattern,
data.iat[row,index_set]).group()
data.iat[row, index_date] = Date
# show the Dataframe
data
输出:
第 2 步:为新日期创建一个额外的列。
Python3
# Create column for Date
data['new_Date']= None
data
输出:
第 3 步:设置搜索索引。
Python3
# set required index
index_set = data.columns.get_loc('Description')
index_date = data.columns.get_loc('new_Date')
print(index_set, index_date)
输出:
1 2
第 4 步:定义日期格式的模式。
我们需要为DD/MM/YY格式的日期模式创建正则表达式。使用[0-9]表达式查找括号之间的任何数字字符。使用转义序列“\”将“/”转义为特殊符号, {2} 、 {4}用于表示字符不属于给定字符串的次数。所以表达式变为'[0-9]{2}\/[0-9]{2}\/[0-9]{4}' 。
例子:
02/04/2020
02 -----> [0 to 9] --> [0-9]
number of character inside the string {2} ( i.e DD)
04- ----> [0 to 9] --> [0-9]
number of character inside the string {2} ( i.e MM)
2020 -->[0 to 9] -->[0-9]
number of character inside the sting {4} ( i.e YYYY)
Python3
# In DD/MM/YYYY
date_pattern = r'([0-9]{2}\/[0-9]{2}\/[0-9]{4})'
第 5 步:搜索日期并分配给 Dataframe 中的相应列。
为了在字符串中使用正则表达式搜索日期,我们使用re库的re.search()函数。
Python3
for row in range(0, len(data)):
Date = re.search(date_pattern,data.iat[row,index_set]).group()
data.iat[row, index_date] = Date
# show the Dataframe
data
输出:
完整代码:
Python3
# importing required module
import pandas as pd;
import re;
data = pd.read_excel("date_sample_data.xlsx");
print("Original data : \n",
data)
# Create column for Date
data['new_Date'] = None
# set index
index_set = data.columns.get_loc('Description')
index_date = data.columns.get_loc('new_Date')
print(index_set, index_date)
# define pattern for date
# in DD/MM/YYYY
date_pattern = r'([0-9]{2}\/[0-9]{2}\/[0-9]{4})'
# searching pattern
# And storing in to DataFrame
for row in range(0, len(data)):
Date = re.search(date_pattern,
data.iat[row,index_set]).group()
data.iat[row, index_date] = Date
# show the Dataframe
data
输出:
注意:在运行此程序之前,请确保您已经在Python环境中安装了xlrd库。