to_csv, to_parquet, to_excel
What it is
to_csv(index=False) for interchange, to_parquet for anything that will be read back by code, to_excel when a human insists.
Why it matters
Parquet preserves dtypes; CSV does not, so every CSV round-trip re-guesses types and is where 'the dates became strings' comes from.
In the real world: Sending finance an Excel file, sharing a CSV with a partner, and saving Parquet for the next automated job: each format for its reader.
df.to_parquet("out/orders.parquet", index=False)
df.to_csv("out/orders.csv", index=False)
pd.read_parquet("out/orders.parquet").dtypes # unchanged
pd.read_csv("out/orders.csv").dtypes # re-guessedWriting CSV with the default index=True and reading it back later with an unexpected Unnamed: 0 column.