如何修复Excel混乱日期?Pandas.to_datetime处理遇阻及跳过方案求助
解决方案
一、精准修正特定错误日期
针对你提到的1414/01/2019和110/05/2019两个错误格式,可以先通过字符串替换或自定义函数修复,再用pandas.to_datetime解析:
方法1:直接替换特定值
先读取数据,对目标列进行精准替换:
import pandas as pd # 读取数据 test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0]) test.columns = ['date'] # 给列命名方便操作 # 替换错误日期 test['date'] = test['date'].replace({ '1414/01/2019': '14/01/2019', '110/05/2019': '11/05/2019' }) # 解析为日期格式(dayfirst=True适配日/月/年的格式) test['cleaned_date'] = pd.to_datetime(test['date'], dayfirst=True)
方法2:自定义函数处理通用错误
如果还有类似“日部分多输入数字”的情况,可以写一个函数自动修正:
import pandas as pd def fix_messy_day(date_str): date_str = str(date_str) parts = date_str.split('/') if len(parts) != 3: return date_str # 格式不对返回原字符串 day, month, year = parts # 处理日部分:如果长度超过2,取前两位(确保在1-31的合理范围内) if len(day) > 2: fixed_day = day[:2] if 1 <= int(fixed_day) <= 31: return f"{fixed_day}/{month}/{year}" return date_str # 读取数据 test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0]) test.columns = ['date'] # 应用修复函数 test['fixed_date'] = test['date'].apply(fix_messy_day) # 解析为日期 test['cleaned_date'] = pd.to_datetime(test['fixed_date'], dayfirst=True)
二、跳过无法解析的行
如果不想手动修正错误格式,可以利用pandas.to_datetime的errors参数将无法解析的日期转为NaT(无效时间),再删除这些行:
import pandas as pd test = pd.read_excel('Messy_Dates.xlsx', usecols=[0], header=None, skiprows=[0]) test.columns = ['date'] # 解析日期,无法解析的转为NaT test['cleaned_date'] = pd.to_datetime(test['date'], dayfirst=True, errors='coerce') # 删除包含无效日期的行 test_clean = test.dropna(subset=['cleaned_date'])
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

