使用python的日期时间格式
我正在处理包含以下列的excel文件:- df1 我可以使用以下代码更改日期格式:-使用python的日期时间格式,python,excel,Python,Excel,我正在处理包含以下列的excel文件:- df1 我可以使用以下代码更改日期格式:- df1['Dateopened'] = pd.to_datetime(df1['Dateopened']).dt.strftime("%b %d,%Y - %I:%M%p") df1['Date closed'] = pd.to_datetime(df1['Date closed']).dt.strftime("%b %d,%Y - %I:%M%p") 在我的代码中,我
df1['Dateopened'] = pd.to_datetime(df1['Dateopened']).dt.strftime("%b %d,%Y - %I:%M%p")
df1['Date closed'] = pd.to_datetime(df1['Date closed']).dt.strftime("%b %d,%Y - %I:%M%p")
在我的代码中,我需要手动输入列名。我可以做些什么,以便python代码本身搜索这些列并修改数据格式。您可以使用正则表达式检测有日期字段的列
\d*[-]\d*[-]\d*.*
可以帮助您检测日期部分,假设列以日期开头。您可以在数据框的一行上应用正则表达式,并筛选正则表达式匹配的列。您还可以检查列名:
for col in df1.columns:
if col.lower().startswith("date"):
df1[col] = pd.to_datetime(df1[col]).dt.strftime("%b %d,%Y - %I:%M%p")
如果所有包含日期的列都采用特定格式,则可以使用正则表达式进行查看。解决方案如下所示:
toModify = []
for column in df:
if(re.match(pattern, column)):
toModify.append(column)
pd.to_datetime(df1['Dateopened']).dt.strftime("%b %d,%Y - %I:%M%p")
然后您就有了所有需要修改的列名。反复阅读。像这样使用一个简单的列表理解可以做到:
df[[n for n in df.columns]]
n-表示我们的列名
因此,使用您的示例,我们可以这样替换:
toModify = []
for column in df:
if(re.match(pattern, column)):
toModify.append(column)
pd.to_datetime(df1['Dateopened']).dt.strftime("%b %d,%Y - %I:%M%p")
为了
您甚至可以检查例如“DateOpen”或执行某些功能
pd.to_datetime(df1[[n if n == "Dateopened" else "do something here..." for n in df1.columns]]).dt.strftime("%b %d,%Y - %I:%M%p")
尝试EAFP样式以外的其他样式 如果你有很多的日期格式,那么这就是方法。在这种情况下,将比正则表达式运行得更快
from openpyxl import load_workbook
from datetime import datetime
work_book = load_workbook("Z:/github/StackOverFlow/62717532/source.xlsx")
work_sheet = work_book.active
format_ = '%Y-%m-%d'
for index, row in enumerate(work_sheet.rows):
data = [i.value for i in row]
# trying format to each rows
for idx, item in enumerate(data):
try:
row[idx] = datetime.strptime(item, format_)
except (TypeError, ValueError): # if fail, it's not date.
pass
print(data)
source.xlsx
结果
['Num', 'Date', 'Stat']
[1, datetime.datetime(2019, 10, 30, 0, 0), 'Open']
[2, datetime.datetime(2019, 10, 31, 0, 0), 'Closed']
[3, datetime.datetime(2019, 11, 1, 0, 0), 'Open']
[4, datetime.datetime(2019, 11, 2, 0, 0), 'Open']
[5, datetime.datetime(2019, 11, 3, 0, 0), 'Closed']
谢谢Bribba。这对我来说很有用。但我得到的问题是,我又得到了一个文件,其中包含“创建日期/时间案例”和“关闭日期/时间案例”,日期格式为6/1/2020 1.30 Pm。@RishiRaj您还可以创建一个函数来“识别”需要转换的格式。一旦你知道你在一个日期栏中,你就可以确定你正在使用的格式并反转(例如,如果你有“/”或“否”),你能告诉我怎么做吗..我没有得到这些步骤