首页 > 解决方案 > 我无法使用 python datetime 更改日期格式

问题描述

我有一个数据框,其中包含字符串模式下的日期值列。我想将它转换为日期时间,但我根本做不到。

我首先尝试让 datetime 函数自动检测它,但它不能。我也尝试过手动操作,但我也没有找到解决方案。日期格式为“1 Ago 2020”,月份为西班牙语格式,同时,如您所见,它不包含直到 9 天的双 0。

我使用了不同的代码,但在这里我展示了一些代码的示例。

import pandas as pd 
import datetime
dfweight = pd.read_csv('data_weight.csv') 
pd.to_datetime(dfweight['Fecha'], format='%d %b, %Y')

他扔的地方:ValueError:时间数据'2020年5月12日'与格式'%d %b,%Y'不匹配(匹配)

我还尝试添加 # (% # d) 所以它不显示 0 到 9,因为我在一些评论中读到,但它显示以下错误。

ValueError: '#' 是格式为 '% # d% b,% Y' 的错误指令

如果有人可以帮助我,我会提前感谢你,因为我被阻止了。提前致谢

标签: pythonstringdatedatetimetype-conversion

解决方案


由于您使用的是西班牙语格式,因此您需要设置一个西班牙语locale.

  1. 在你的外壳中,运行locale-gen. 这可确保您拥有必要的本地化文件。
  >> sudo locale-gen es_ES.UTF-8
Generating locales (this might take a while)...
  es_ES.UTF-8... done
Generation complete.
  1. 在python中,首先设置语言环境。然后调用类似datetime.datetime.strptime. 如果您为日期格式代码"%d %b %Y"传递了正确的字符串(如),那么 0 应该无关紧要。
  >> python3
Python 3.7.4 (default, Aug 13 2019, 20:35:49)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> import datetime
>>> locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8')
'es_ES.UTF-8'
>>> datetime.datetime.strptime("1 Ago 2020", "%d %b %Y")
datetime.datetime(2020, 8, 1, 0, 0)
>>> datetime.datetime.strptime("09 Ago 2020", "%d %b %Y")
datetime.datetime(2020, 8, 9, 0, 0)

推荐阅读