Python 在数据帧中转换日期格式

Python 在数据帧中转换日期格式,python,pandas,datetime,dataframe,format,Python,Pandas,Datetime,Dataframe,Format,我有一个dataframe,Date列有两种不同类型的日期格式 例如1983-11-10 00:00:00和1983年11月10日 我希望它们都是相同的类型,如何遍历数据帧的日期列并将日期转换为一种格式?我相信您需要参数dayfirst=True: 因为: df['Date'] = pd.to_datetime(df.Date) print (df) Date 0 1983-11-10 1 1983-10-11 或者,您可以指定这两种格式,然后使用: 多种格式的通用解决方案:

我有一个dataframe,Date列有两种不同类型的日期格式

例如1983-11-10 00:00:00和1983年11月10日


我希望它们都是相同的类型,如何遍历数据帧的日期列并将日期转换为一种格式?

我相信您需要参数
dayfirst=True

因为:

df['Date'] = pd.to_datetime(df.Date)
print (df)
        Date
0 1983-11-10
1 1983-10-11

或者,您可以指定这两种格式,然后使用:

多种格式的通用解决方案:

from functools import reduce 

def convert_formats_to_datetimes(col, formats):
    out = [pd.to_datetime(col, format=x, errors='coerce') for x in formats]
    return reduce(lambda l,r: pd.Series.combine_first(l,r), out)

formats = ['%Y-%m-%d %H:%M:%S', '%d/%m/%Y']
df['Date'] = df['Date'].pipe(convert_formats_to_datetimes, formats)
print (df)
        Date
0 1983-11-10
1 1983-11-10
我希望它们都是相同的类型,如何遍历 我的数据框的日期列,并将日期转换为一种格式

您的输入数据不明确:是11月10日还是10月11日?您需要指定逻辑来确定哪个是合适的。如果要按顺序尝试多种日期格式,则函数非常有用:

def date_apply_formats(s, form_lst):
    s = pd.to_datetime(s, format=form_lst[0], errors='coerce')
    for form in form_lst[1:]:
        s = s.fillna(pd.to_datetime(s, format=form, errors='coerce'))
    return s

df['Date'] = date_apply_formats(df['Date'], ['%Y-%m-%d %H:%M:%S', '%d/%m/%Y'])
优先权授予
表格
中的第一项。该解决方案可扩展到任意数量的提供格式。

输入日期为 NSECODE日期结束 1 NSE500 20000103 1291.5500 2 NSE500 20000104 1335.4500 3 NSE500 20000105 1303.8000

history_nseindex_df["Date"] = pd.to_datetime(history_nseindex_df["Date"])
history_nseindex_df["Date"] = history_nseindex_df["Date"].dt.strftime("%Y-%m-%d")
ouput现在是 NSECode日期结束 1 NSE500 2000-01-03 1291.5500 2 NSE500 2000-01-04 1335.4500
3 NSE500 2000-01-05 1303.8000当然可以。谢天谢地,让你发布答案,让你概括OP的问题:)。
history_nseindex_df["Date"] = pd.to_datetime(history_nseindex_df["Date"])
history_nseindex_df["Date"] = history_nseindex_df["Date"].dt.strftime("%Y-%m-%d")
history_nseindex_df["Date"] = pd.to_datetime(history_nseindex_df["Date"])
history_nseindex_df["Date"] = history_nseindex_df["Date"].dt.strftime("%Y-%m-%d")