如何在Pandas中将丹麦locale日期字符串转换为datetime类型
问题原因
- 列名大小写不匹配:CSV中日期列名为小写
date,代码中调用的是首字母大写的df['Date'],实际取到的是空值,转换后自然全为NaT。 - 语法错误:你贴出的
pd.to_datetime调用末尾遗漏了右括号,实际运行会直接触发语法错误,需要先补上。 - 时间格式符使用错误:代码中用
%I对应小时,该符号仅适用于12小时制时间(需搭配上午/下午标识%p使用),示例中的时间为24小时制写法,需替换为%H。 - 未指定丹麦语 locale:pandas默认locale无法识别丹麦语的月份缩写
okt(对应10月),导致%b匹配失败。
解决方案
方案1:pandas 2.0及以上版本(推荐)
直接通过pd.to_datetime的locale参数指定丹麦语环境,无需修改全局设置:
import pandas as pd df = pd.read_csv("messages.csv", sep=",") df['DateConverted'] = pd.to_datetime( df['date'], errors='coerce', format='%d. %b. %Y %H.%M', locale='da_DK' # 丹麦语locale标识 )
方案2:pandas 2.0以下版本
需要先修改全局locale为丹麦语,再执行时间转换,不同系统的locale标识略有区别:
import pandas as pd import locale # 不同系统选对应的写法 # locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8') # Linux/Mac 写法 locale.setlocale(locale.LC_TIME, 'danish') # Windows 写法 df = pd.read_csv("messages.csv", sep=",") df['DateConverted'] = pd.to_datetime( df['date'], errors='coerce', format='%d. %b. %Y %H.%M' )
验证结果
运行后示例数据的DateConverted列会正确输出时间值,比如9. okt. 2021 11.41会转为2021-10-09 11:41:00。
内容的提问来源于stack exchange,提问作者Toeffe
相关产品推荐
相关产品推荐

