写入时以时间戳格式保留一列 pd.to_csv

Preserve one column in timestamp format when write pd.to_csv

我需要将以下数据框写入 csv:

prodid    value           timestamp  
322         4           2021-11-03 17:32:12.252   
123        34           2021-11-03 18:42:12.602
...

import datetime

df = pd.DataFrame([(0, 4, datetime.datetime.strptime("2021-11-03 14:32:13.4)02", "%Y-%m-%d %H:%M:%S.%f"), 
                   (1, 34, datetime.datetime.strptime("2021-11-03 18:42:12.602", "%Y-%m-%d %H:%M:%S.%f"))],
                   columns=['prodid', 'value', 'timestamp'])

当我将其写入 StringIO 缓冲区中的 csv 时:

import io

io_buff = io.StringIO()
df.to_csv(io_buff, sep='\t', header=False, index=False)

timestamp 不再保留为 datetime。当我进一步处理这个 io_buff 时,例如将其写入 Postgres table,列 timestamp 被写为 numeric.

如何在使用 pd.to_csv() 写入时保留时间戳格式?

csv 文件格式不能保留任何类型,因为它只是一堆逗号分隔的字符串。由 csv 文件的使用者将其解析为所需的类型。避开它。

如果你只想使用 pandas 存储数据并再次使用 pandas 读取,请使用 parquet 或 feather,这样你将保留你的类型(并节省 90% 的磁盘空间 space,写入/读取速度提高 10 倍)。

如果要将数据写入 postgres,请使用 df.to_sql(..., method='multi')。如果这还不够快,并且你正在做一些疯狂的 COPY 魔术,那么请按照这个答案 来信,如果仍然失败,请在你的问题中添加更多细节。