【问题标题】:ValueError: time data does not match format '%Y/%m/%d %H:%M:%S'ValueError: 时间数据与格式 '%Y/%m/%d %H:%M:%S' 不匹配
【发布时间】:2021-05-02 12:34:15
【问题描述】:

我需要将数千条 Datetime 记录转换为 TimeStamp。当我运行以下代码时:

from time import strptime
import pandas as pd
import numpy as np
import datetime

cepo = str(pd.read_csv('test.csv',sep = ',')) 
print(cepo)
element = datetime.datetime.strptime(cepo,'%Y/%m/%d %H:%M:%S')
tuple = element.timetuple()
timestamp = time.mktime(tuple)
print(timestamp)

我收到以下错误:

     Date      Time
0  2018/02/11  02:36:59
1  2018/02/12  00:47:11
2  2018/02/12  01:36:36
3  2018/02/12  03:27:51
4  2018/02/12  03:48:29
5  2018/02/12  03:50:49
Traceback (most recent call last):
  File "epoch.py", line 9, in <module>
    element = datetime.datetime.strptime(cepo,'%Y/%m/%d %H:%M:%S')
  File "/Users/joaofontiela/opt/anaconda3/envs/pywork/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
    tt, fraction, gmtoff_fraction = _strptime(data_string, format)
  File "/Users/joaofontiela/opt/anaconda3/envs/pywork/lib/python3.8/_strptime.py", line 349, in _strptime
    raise ValueError("time data %r does not match format %r" %
ValueError: time data '         Date      Time\n0  2018/02/11  02:36:59\n1  2018/02/12  00:47:11\n2  2018/02/12  01:36:36\n3  2018/02/12  03:27:51\n4  2018/02/12  03:48:29\n5  2018/02/12  03:50:49' does not match format '%Y/%m/%d %H:%M:%S'

输入文件(test.csv)看起来像:

Date,Time
2018/02/11,02:36:59
2018/02/12,00:47:11
2018/02/12,01:36:36
2018/02/12,03:27:51
2018/02/12,03:48:29
2018/02/12,03:50:49

如何解决错误“时间数据与格式'%Y/%m/%d %H:%M:%S”不匹配?

【问题讨论】:

  • 为什么要将数据帧转换为字符串?如果您想使用 pandas 将字符串解析为日期时间,请使用 to_datetime
  • csv 转换尝试处理的文件末尾是否有意外字符?假设 text.csv 完整显示,并且下一行(未显示)中没有一系列格式错误的字符导致问题。

标签: python pandas datetime timestamp strptime


【解决方案1】:

您可以轻松组合 csv 中的“日期”和“时间”列,例如

# load the csv file content into a dataframe
df = pd.read_csv(filename)

# combine date and time columns and parse to datetime
df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

print(df['datetime'])
0   2018-02-11 02:36:59
1   2018-02-12 00:47:11
2   2018-02-12 01:36:36
3   2018-02-12 03:27:51
4   2018-02-12 03:48:29
5   2018-02-12 03:50:49
Name: datetime, dtype: datetime64[ns]

您可以计算 Unix 时间(自 1970-01-01 UTC 以来的 Posix / 秒)

df['posix[s]'] = df['datetime'].astype(int) / 1e9

print(df['posix[s]'])
0    1.518317e+09
1    1.518396e+09
2    1.518399e+09
3    1.518406e+09
4    1.518407e+09
5    1.518407e+09
Name: posix[s], dtype: float64

【讨论】:

  • 感谢您的帮助。但它现在提出了另一个问题。如何将 df.datetime 转换为 posix 数据格式?我查看了几个示例,其中大多数是指将 posix 数据格式转换为日期时间。任何帮助都是好的,因为我不是熟练的程序员
  • @Meocomandante 当然,我已经进行了编辑。 .astype(int) 自纪元以来转换为纳秒,因此您可以除以 1e9 得到秒。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 2017-06-04
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2019-05-24
相关资源
最近更新 更多