使用pandas to_datetime函数时的日期解析错误求助
Fixing Date Parsing Mix-Ups with
pd.to_datetime() for dd/mm/yyyy Formats 这个问题太典型了——当你的日期是dd/mm/yyyy格式,但其中部分日期的日和月数值都在1-12之间时(比如11/04/2018),pandas的自动日期推断功能会混淆美式(mm/dd/yyyy)和欧式(dd/mm/yyyy)格式,导致部分日期的日和月颠倒。
这里有两个直接有效的解决办法:
方法1:使用dayfirst=True参数
明确告诉pandas,日期字符串的日部分在前,这样它就会优先按照dd/mm/yyyy的规则解析:
import pandas as pd # 读取并合并数据 df1 = pd.read_csv('sales.csv') df2 = pd.read_csv('sales1.csv') df3 = pd.read_csv('sales2.csv') df4 = pd.read_csv('sales3.csv') df = pd.concat([df1, df2, df3, df4]) # 转换日期,指定日在前 df['Transaction date'] = pd.to_datetime(df['Transaction date'], dayfirst=True) print(df['Transaction date'])
方法2:严格指定日期格式
如果你确定所有日期都是dd/mm/yyyy格式,可以直接用format参数强制pandas按照这个格式解析,完全避免歧义:
import pandas as pd # 读取并合并数据 df1 = pd.read_csv('sales.csv') df2 = pd.read_csv('sales1.csv') df3 = pd.read_csv('sales2.csv') df4 = pd.read_csv('sales3.csv') df = pd.concat([df1, df2, df3, df4]) # 严格按照dd/mm/yyyy格式转换 df['Transaction date'] = pd.to_datetime(df['Transaction date'], format='%d/%m/%Y') print(df['Transaction date'])
两种方法都能让你得到统一的yyyy-mm-dd格式的datetime64[ns]类型日期,解决第24-29行的颠倒问题。
内容的提问来源于stack exchange,提问作者user9479535
相关产品推荐
相关产品推荐

