我有一个日期框架:
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'。
有帮助吗?
答案 0 :(得分:1)
首先使用x.A
或x['A']
,但日期时间无效-为format
格式添加参数YYYYMMDD
,并为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
由于熊猫以纳秒分辨率表示时间戳,因此可以使用64位整数表示的时间跨度限制为大约584年:
在[92]中:pd.Timestamp.min
Out [92]:时间戳('1677-09-21 00:12:43.145225')在[93]中:pd.Timestamp.max
Out [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