我写了一个函数,将指定日期列的所有日期转换为指定格式。任何丢失或无效的日期都将替换为用户指定的值。
问题是,所有日期都被转换为相同的默认格式'%Y/%m/% d',而不管指定的格式如何。
验证码:
# Date Formatting
from dateutil.parser import parse
import pandas as pd
def date_fun(dfd, date_inputs):
try:
col_name = date_inputs["DateColumn"]
replace_date = date_inputs["ReplaceValue"]
date_col = dfd[col_name]
formatted_dates = pd.to_datetime(date_col, errors='coerce')
# dayfirst=True
# formatted_dates = pd.to_datetime(date_col, errors='coerce', dayfirst=True)
# formatted_dates = pd.to_datetime(date_col, format='%m/%d/%Y', errors='coerce')
# formatted_dates = pd.to_datetime(date_col, format='%Y/%m/%d', errors='coerce')
# formatted_dates = pd.to_datetime(date_col, format='%d/%m/%Y', errors='coerce')
if replace_date is not None:
formatted_dates = formatted_dates.fillna(replace_date)
dfd[col_name] = formatted_dates
result_dict = dfd.to_dict(orient='records')
for record in result_dict:
for key, value in record.items():
if isinstance(value, float):
record[key] = str(value)
return result_dict
except Exception as e:
logging.error(f"An error occurred while performing the operation: {e}")
列数据
25.09.2019
9/16/2015
10.12.2017
2008,13,02
23-01-1992, 7:45
我的输出
2019-09-25T00:00:00
2015-09-16T00:00:00
2017-10-12T00:00:00
2008-02-01T00:00:00
1992-01-23T07:45:00
为什么没有将日期转换为指定的格式?
**注:**我保留了我在评论中尝试的不同格式。
2条答案
按热度按时间hfwmuf9z1#
请注意,
pd.to_datetime()
返回一个pd.Timestamp
对象。然后使用str(timestamp)
,它默认为ISO format字符串。您可以使用<timestamp>.strftime()
,并获得不同的输出格式。就我所知,从你的例子中,Pandas正确地转换了输入字符串。
6ss1mwsb2#
文档指出format指定了要解析的时间字符串的预期方式,而不是输出日期格式。这里:https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html