首页 > 解决方案 > 转换一系列日期格式熊猫不起作用

问题描述

我有一个日期框架:

x = pd.DataFrame({"A": ['19940213', '10000301', '19240613', '10000501']})

为什么我不能将它们转换为 yyyy-mm-dd ?我已经关注了多个 SO 帖子并且没有工作。

我试过了 :

x["d"] = pd.to_datetime(df.A)

x["d"] = pd.to_datetime(df["A"])

输出 KeyError:'A'。

有什么帮助吗?

标签: pythonpandas

解决方案


首次使用x.Aor x['A'],但日期时间无效 -formatYYYYMMDD格式添加参数,errors='coerce'用于缺少值,因为不匹配:

x = pd.DataFrame({"A": ['19940213', '10000301', '19240613', '10000501']})
x["d"] = pd.to_datetime(x.A, format='%Y%m%d', errors='coerce')
print (x)
          A          d
0  19940213 1994-02-13
1  10000301        NaT
2  19240613 1924-06-13
3  10000501        NaT

时间戳限制

由于 pandas 以纳秒分辨率表示时间戳,因此可以使用 64 位整数表示的时间跨度被限制为大约 584 年:

输入 [92]:pd.Timestamp.min
输出 [92]:时间戳('1677-09-21 00:12:43.145225')

输入 [93]:pd.Timestamp.max
输出 [93]:时间戳('2262-04-11 23:47:16.854775807')

另一种可能的解决方案是使用Periods

def conv(x):
    return pd.Period(year=x // 10000, month=x // 100 % 100,
                     day=x % 100, freq='D')
   
x = pd.DataFrame({"A": ['19940213', '10000301', '19240613', '10000501']})
x["d"] = x.A.astype(int).apply(conv)
print (x)
          A           d
0  19940213  1994-02-13
1  10000301  1000-03-01
2  19240613  1924-06-13
3  10000501  1000-05-01

推荐阅读