You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中无年份的日期列转换失败问题求助

Pandas中无年份的日期列转换失败问题求助

我在尝试用Pandas转换日期列时遇到了困难,表格里没有包含年份,这似乎让转换变得棘手。

我的数据如下:

28 JUL  Unnamed: 0        Alura *Alura - 7/12     68,00
0   28 JUL         NaN  Passei Direto S/A. - 3/12     19,90
1   31 JUL         NaN          Drogarias Pacheco     25,99
2   31 JUL         NaN     Mundo Verde - Rj - Sho      5,90
3   31 JUL         NaN              Paypal *99app      4,25
4   04 AGO         NaN            Saldo em atraso  1.091,17
5   04 AGO         NaN          Crédito de atraso  1.091,17
6   06 AGO         NaN             Apple.Com/Bill     34,90
7   07 AGO         NaN        Pagamento em 07 AGO  1.091,17
8   07 AGO         NaN            Juros de atraso     16,86
9   07 AGO         NaN              IOF de atraso      4,43
10  07 AGO         NaN            Multa de atraso     21,91
11  08 AGO         NaN             Apple.Com/Bill     21,90
12  09 AGO         NaN      Google Youtubepremium     20,90
13  10 AGO         NaN              Amazon.Com.Br     41,32
14  12 AGO         NaN           Uber *Uber *Trip     17,91
15  12 AGO         NaN           Uber *Uber *Trip     16,94
16  12 AGO         NaN                Mia Cookies     47,50
17  13 AGO         NaN           Uber *Uber *Trip     16,96
18  13 AGO         NaN           Uber *Uber *Trip     19,98
19  16 AGO         NaN           Uber *Uber *Trip     11,93
20  16 AGO         NaN           Uber *Uber *Trip      9,97
21  18 AGO         NaN           Uber *Uber *Trip      9,91
22  22 AGO         NaN           Uber *Uber *Trip      9,96
23  23 AGO         NaN              Amazonprimebr     14,90
24  27 AGO         NaN        Paypal *Sacocheiotv     15,00
25  27 AGO         NaN        Pag*Easymarketpleno      6,50

我尝试用这段代码转换,但没有成功:

df["Data"] = pd.to_datetime(df["Data"], format="%d %b", errors="coerce")

得到的错误输出(部分日期变成了NaT,且年份默认是1900):

Data                      Local  Valor
0  1900-07-28        Alura *Alura - 7/12  68,00
1  1900-07-28  Passei Direto S/A. - 3/12  19,90
2  1900-07-31          Drogarias Pacheco  25,99
3  1900-07-31     Mundo Verde - Rj - Sho   5,90
4  1900-07-31              Paypal *99app   4,25
7         NaT             Apple.Com/Bill  34,90
9         NaT            Juros de atraso  16,86
10        NaT              IOF de atraso   4,43
11        NaT            Multa de atraso  21,91
12        NaT             Apple.Com/Bill  21,90
13        NaT      Google Youtubepremium  20,90
14        NaT              Amazon.Com.Br  41,32
15        NaT           Uber *Uber *Trip  17,91
16        NaT           Uber *Uber *Trip  16,94
17        NaT                Mia Cookies  47,50
18        NaT           Uber *Uber *Trip  16,96
19        NaT           Uber *Uber *Trip  19,98
20        NaT           Uber *Uber *Trip  11,93
21        NaT           Uber *Uber *Trip   9,97
22        NaT           Uber *Uber *Trip   9,91
23        NaT           Uber *Uber *Trip   9,96
24        NaT              Amazonprimebr  14,90
25        NaT        Paypal *Sacocheiotv  15,00
26        NaT        Pag*Easymarketpleno   6,50

有没有人能帮我解决这个问题?


嘿,我来帮你梳理下问题,然后给出几个可行的解决办法~

问题出在哪?

你遇到的两个核心问题:

  • 月份缩写语言不兼容:你的日期用的是葡萄牙语的月份缩写(比如JUL是葡语的七月,AGO是八月),但Pandas默认是按英文的月份缩写(Jul、Aug)来解析的,所以碰到AGO这类葡语缩写时就会解析失败,出现NaT。
  • 默认年份不对:只给日和月的话,Pandas会自动填1900年,这显然不符合你的实际需求(从数据看应该是最近的年份,比如2024)。

怎么解决?

这里提供3种简单的方案,你可以根据自己的环境选:

方案1:手动替换葡语月份为英文

先把葡语的月份缩写换成Pandas能识别的英文,再指定年份解析:

# 葡语月份到英文的映射表
month_translate = {
    'JAN': 'Jan', 'FEV': 'Feb', 'MAR': 'Mar', 'ABR': 'Apr',
    'MAI': 'May', 'JUN': 'Jun', 'JUL': 'Jul', 'AGO': 'Aug',
    'SET': 'Sep', 'OUT': 'Oct', 'NOV': 'Nov', 'DEZ': 'Dec'
}

# 替换日期列里的葡语月份
df['Data'] = df['Data'].replace(month_translate, regex=True)

# 解析日期,指定你需要的年份(比如2024,根据实际情况改)
df['Data'] = pd.to_datetime(df['Data'], format='%d %b', year=2024)

方案2:直接给日期加年份再解析

如果觉得替换月份麻烦,也可以直接在每个日期后面拼上你要的年份,再解析:

# 给每个日期字符串加上年份(比如2024)
df['Data'] = df['Data'] + ' 2024'

# 按完整的日-月-年格式解析
df['Data'] = pd.to_datetime(df['Data'], format='%d %b %Y')

方案3:设置系统locale为葡萄牙语

如果你用的系统支持葡萄牙语环境,可以直接设置locale让Pandas识别葡语月份:

import locale
import pandas as pd

# 注意不同系统的locale名称不一样:Linux/macOS用'pt_PT.UTF-8',Windows用'ptb'
try:
    locale.setlocale(locale.LC_TIME, 'pt_PT.UTF-8')
except:
    locale.setlocale(locale.LC_TIME, 'ptb')

# 解析日期并指定年份
df['Data'] = pd.to_datetime(df['Data'], format='%d %b', year=2024)

效果验证

用上面任意一种方法处理后,你的日期列应该会变成2024-07-28、2024-08-04这样的正确格式,那些NaT也会消失啦~


备注:内容来源于stack exchange,提问作者leotricano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:05:31