写入时以时间戳格式保留一列 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
魔术,那么请按照这个答案 来信,如果仍然失败,请在你的问题中添加更多细节。
我需要将以下数据框写入 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
魔术,那么请按照这个答案 来信,如果仍然失败,请在你的问题中添加更多细节。