pandas - 将两列转换为 datetime.datetime 格式的问题
问题描述
我现在编写了代码,用于将我的数据框的两列从字符串更改为 datetime.datetime 对象,类似于以下内容:
def converter(date):
date = dt.strptime(date, '%m/%d/%Y %H:%M:%S')
return date
df = pd.DataFrame({'A':['12/31/9999 0:00:00','1/1/2018 0:00:00'],
'B':['4/1/2015 0:00:00','11/1/2014 0:00:00']})
df['A'] = df['A'].apply(converter)
df['B'] = df['B'].apply(converter)
当我运行此代码并打印数据框时,它会像这样
A B
0 9999-12-31 00:00:00 2015-04-01
1 2018-01-01 00:00:00 2014-11-01
当我检查每一列的数据类型时,他们读到
A object
B datetime64[ns]
但是当我检查第一行实际单元格的格式时,他们读到
<class 'datetime.datetime'>
<class 'pandas._libs.tslib.Timestamp'>
在试验之后,我认为由于“A”列中的日期“12/31/9999 0:00:00”,我遇到了越界错误,这导致该列被转换为日期时间。日期时间对象。我的问题是如何将我的数据框的“B”列转换为 datetime.datetime 对象,以便我可以在类似于以下的列上运行查询
df.query('A > B')
没有得到错误或错误的输出。
提前致谢
解决方案
由于'9999'
只是一些虚拟年份,您可以通过选择一个有界限的虚拟年份(或根据您的实际数据更有意义的年份)来简化您的生活:
import pandas as pd
df.replace('9999', '2060', regex=True).apply(pd.to_datetime)
输出:
A B
0 2060-12-31 2015-04-01
1 2018-01-01 2014-11-01
A datetime64[ns]
B datetime64[ns]
dtype: object
正如@coldspeed 指出的那样,删除那些糟糕的日期可能会更好:
df.apply(pd.to_datetime, errors='coerce')
# A B
#0 NaT 2015-04-01
#1 2018-01-01 2014-11-01
推荐阅读
- html - 在 HTML 中加载多个相同的角度选择器标签
- c++ - 通用类型转换
- java - 如何在android中获得准确的UTC时间戳
- c# - 实体框架核心在第一次调用时太慢了
- excel - 试图动态地将文本框添加到用户窗体?
- android - 如何从 Paint 中获取文本基线
- python - 如何在数组中获得字符串的串联?
- c# - 没有一个 SecurityTokenHandlers 可以读取“securityToken”
- java - 如何更改 Eclipse 控制台中日志的颜色?
- sql-server - SqlSever:EXECUTE SP_EXECUTESQL 中的多个 CTE