我正在尝试用 Python 将数据写入 csv 文件。但是,我在编写时间戳时遇到了格式问题。
我的数据是 UNIX 毫秒格式。为此,我正在使用 pandas 内置的 to_datetime(unit = 'ms')
方法。但是,我的很多早期数据都没有秒内记录。数据仅以截断的秒间隔存储。因此,虽然我希望我的数据像这样存储 2015-01-01 00:00:00.000
,但它却像这样存储它 2015-01-01 00:00:00
并完全删除毫秒组件。到了今年,我就有了可以写成 2020-01-01 00:01:07.748
的数据,例如。
可以在这里看到我编写的代码部分:
df = pd.DataFrame(data, columns = ['Trade ID', 'Date', 'Amount', 'Price'])
df['Date'] = pd.to_datetime(df['Date'], unit = 'ms')
df.to_csv(csv_file_path, mode = 'a', header = False, index = False)
我知道它与实际将其写入 csv 的行无关。因为它为确实具有秒内记录的记录保留毫秒数据。我知道它位于将它从毫秒转换为日期时间的行中。我也尝试在该方法中使用 format
参数,但由于您无法同时指定单位和格式,因此会引发错误。
最佳答案
用微秒(我不知道你在日期列中到底有什么)和映射和切片(帖子的最后一行)
df = pd.DataFrame({'datetime': {0: '2020/12/20 05:03:33.324',
1: '2020/12/20 05:03:55.33556'}})
print(df)
df['formatted'] = pd.to_datetime(df['datetime']).dt.strftime("%y-%m-%d %H:%M:%S.%f")
print(df)
df.to_csv("./dates.csv", mode = 'a', header = False, index = False)
控制台输出
datetime
0 2020/12/20 05:03:33.324
1 2020/12/20 05:03:55.33556
datetime date_time_formatted
0 2020/12/20 05:03:33.324 20-12-20 05:03:33.324000
1 2020/12/20 05:03:55.33556 20-12-20 05:03:55.335560
在csv文件中:
2020/12/20 05:03:33.324,20-12-20 05:03:33.324000
2020/12/20 05:03:55.33556,20-12-20 05:03:55.335560
从这里我检查了格式选项: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
事实上,使用 map 和 slice 是可行的:
df['with_map'] = pd.to_datetime(df['datetime']).dt.strftime("%y-%m-%d %H:%M:%S.%f").map(lambda date_time: date_time[:-3])
使用 str 和 slice(感谢@MrFuppes)
df['dt_final'] = pd.to_datetime(df['datetime']).dt.strftime("%y-%m-%d %H:%M:%S.%f").str[:-3]
关于python - 如何保持时间戳的毫秒分量,即使它的值为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65398625/