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'
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.