python - 时间数据与似乎匹配时指定的格式不匹配
问题描述
我在 pandas 中有两个日期列的数据框:
>>>ID name start end
0 12 Tik 1/6/2020 None
1 32 Tak 12/31/2019 None
2 45 Tek 9/1/2019 1/30/2020
3 78 Tok 9/1/2019 1/29/2020
我正在尝试将这些日期转换为日期时间以采用 Ymd 格式,例如 12/31/2019 将是 2019-12-31 :
df[['start','end']] =df[['start','end']].apply(pd.to_datetime, format=''%Y-%m-%d'')
但是每当我运行它时,我都会收到错误:
ValueError:时间数据 2020 年 1 月 6 日与指定的格式不匹配
我尝试过将格式指定为类似于给定日期(例如(dmY):
df[['start','end']] =df[['start','end']].apply(pd.to_datetime, format=''%d-%m-%Y'')
>>>ValueError: time data '1/6/2020' does not match format '%d-%m-%Y' (match)
我试图按照这里第一个答案中的建议打破它:How to change the datetime format in pandas and to first conver to datetime 然后使用 strftime 但在第一行中我得到了错误,我需要指定格式。
我找不到发生这种情况的任何原因,也许是因为日期和月份没有两位数?
我的最终目标是将这些日期列转换为 %Y-%m-%d 格式
解决方案
- 问题似乎是围绕格式使用了两组引号
''...''
- 的
format
参数pandas.to_datetime
指定列的当前格式,而不是所需的格式。- 这些日期的格式是
'%m/%d/%Y'
- 这些日期的格式是
import pandas as pd
# setup the dataframe
df = pd.DataFrame({'ID': [12, 32, 45, 78], 'name': ['Tik', 'Tak', 'Tek', 'Tok'], 'start': ['1/6/2020', '12/31/2019', '9/1/2019', '9/1/2019'], 'end': [None, None, '1/30/2020', '1/29/2020']})
# convert to datetime
df[['start','end']] = df[['start','end']].apply(pd.to_datetime, format='%m/%d/%Y')
# display(df)
ID name start end
0 12 Tik 2020-01-06 NaT
1 32 Tak 2019-12-31 NaT
2 45 Tek 2019-09-01 2020-01-30
3 78 Tok 2019-09-01 2020-01-29
推荐阅读
- html - 如有必要,定位绝对全宽
- spring-security - 覆盖 Spring Boot 安全性
- sql - 查询运行缓慢且缺少索引
- react-native - 使用 expo 在 react-native 中重新渲染错误太多
- javascript - React Js:如何读取 csv 文件?(所有列中只有 4 列)
- html - 弯曲一个指向 div 的点
- git - 如何 git 克隆从多个 svn 项目构建的单个 svn 项目
- rust - Rust 反向指针
- encryption - FSM 问题 vhdl AES 加密未进入第三状态?
- python - 使用 Python 获取页面加载时间