将pandas dataframe中的日期转换为指定格式,仅适用于单一格式

c9qzyr3d  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(265)

我写了一个函数,将指定日期列的所有日期转换为指定格式。任何丢失或无效的日期都将替换为用户指定的值。
问题是,所有日期都被转换为相同的默认格式'%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

为什么没有将日期转换为指定的格式?

**注:**我保留了我在评论中尝试的不同格式。

hfwmuf9z

hfwmuf9z1#

请注意,pd.to_datetime()返回一个pd.Timestamp对象。然后使用str(timestamp),它默认为ISO format字符串。您可以使用<timestamp>.strftime(),并获得不同的输出格式。
就我所知,从你的例子中,Pandas正确地转换了输入字符串。

6ss1mwsb

6ss1mwsb2#

文档指出format指定了要解析的时间字符串的预期方式,而不是输出日期格式。这里:https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html

相关问题