pythonpandascsvdate

Why is pandas not formatting dates with date_format?


Why is pandas not formatting dates with date_format argument of to_csv?

pandas.DataFrame([datetime.datetime.now().date()]).to_csv(date_format="%Y %b")
',0\n0,2025-07-31\n'

Solution

  • If you use .dtypes to check what you have in dataframe then you should see that date is kept as object, but datetime is kept as datetime64[ns] and this can make difference.

    import pandas as pd
    import datetime
    
    df = pd.DataFrame({
        "date": [datetime.datetime.now().date()], 
        "datetime": [datetime.datetime.now()], 
    })
    
    print(df.dtypes)
    
    date                object
    datetime    datetime64[ns]
    

    But if you check single value then you see that this object keeps it as datetime.date() and you can still use .apply(lambda x:x.strftime("%Y %b") before sending to csv.

    (but it doesn't allow to use .dt.strftime like for datetime64[ns])

    df["date"] = df["date"].apply(lambda x:x.strftime("%Y %b"))
    
    df["datetime"] = df["datetime"].dt.strftime("%Y %b")
    

    to_csv() doesn't allow to set format for selected columns (with objects) so it has to be done before sending to file.