我需要将以下数据帧写入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)
列CCD_ 2不再被保留为CCD_。当我进一步处理这个io_buff
时,例如将它写入Postgres表,列timestamp
被写为numeric
。
使用pd.to_csv()
编写时,如何保留时间戳格式?
csv文件格式不能保留任何类型,因为它只是一堆逗号分隔的字符串。csv文件的使用者可以将其解析为所需的类型。避免。
如果你只想用panda存储数据,然后再用panda读取,可以使用镶木地板或羽毛,这样你就可以保留你的类型(节省90%的磁盘空间,写/读速度提高10倍(。
如果要将数据写入postgres,请使用df.to_sql(..., method='multi')
。如果这还不够快,并且你正在做一些疯狂的COPY
魔术,那么按照这个答案https://stackoverflow.com/a/55495065/6110160如果问题仍然失败,请在信中添加更多细节。