使用python的日期时间格式

使用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") 在我的代码中,我

我正在处理包含以下列的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")

在我的代码中,我需要手动输入列名。我可以做些什么,以便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您还可以创建一个函数来“识别”需要转换的格式。一旦你知道你在一个日期栏中,你就可以确定你正在使用的格式并反转(例如,如果你有“/”或“否”),你能告诉我怎么做吗..我没有得到这些步骤