【问题标题】:Find difference between object & timedate fields in pandas查找熊猫中对象和时间日期字段之间的区别
【发布时间】:2015-04-28 18:51:16
【问题描述】:

我有一个熊猫数据框“df_OUT”,如下所示。我正在使用 python 2.7 -

>>> df_OUT.dtypes
TRX_DATE              datetime64[ns]
ACTUAL_DATE_CLOSED            object

数据框中的值如下所示 -

>>> df_OUT.head(5)
    TRX_DATE   ACTUAL_DATE_CLOSED
0 1995-09-08  4712-12-31 00:00:00
2 2003-06-30  4712-12-31 00:00:00
3 2003-06-30  4712-12-31 00:00:00
4 2003-06-30  4712-12-31 00:00:00
6 1999-08-31  2099-08-31 00:00:00

现在我想找出“TRX_DATE”和“ACTUAL_DATE_CLOSED”在数字中带和不带日期部分的区别。

我尝试了以下 -

df_FINAL_RESULTS['TRX_DATE']-df_FINAL_RESULTS['ACTUAL_DATE_CLOSED'].map(lambda x: x.strftime('%Y-%m-%d'))

这给了我错误-

TypeError: incompatible type [object] for a datetime/timedelta operation

你能指导我吗?

谢谢。

【问题讨论】:

  • 您的日期时间字符串无法被 pandas 或 datetime.strptime 解析,这些日期时间字符串是否有效?
  • 我有解决方案 - df_FINAL_RESULTS['TRX_DATE'].astype(datetime) - df_FINAL_RESULTS['ACTUAL_DATE_CLOSED'].astype(datetime)。为我工作,谢谢。
  • 您注意到 ACTUAL_DATE_CLOSED 年份是 4712 和 2099?
  • @Alexander - 是的,我知道数据集在这里有虚拟数据。

标签: python python-2.7 python-3.x pandas


【解决方案1】:

您的问题是 pandas Timestamp 的最大日期为 2261 年。我们将需要使用 python datetime.date 构造。

# this is not nice data - well past pandas.Timestamp.max
# let's get it as strings into a pandas DataFrame
data = """index, TRX_DATE,   ACTUAL_DATE_CLOSED
0,   1995-09-08,  4712-12-31 00:00:00
2,   2003-06-30,  4712-12-31 00:00:00
3,   2003-06-30,  4712-12-31 00:00:00
4,   2003-06-30,  4712-12-31 00:00:00
6,   1999-08-31,  2099-08-31 00:00:00
"""
from StringIO import StringIO # import from io for Python 3
df = pd.read_csv(StringIO(data), header=0, sep=',', index_col=0, 
    skipinitialspace=True, dtype={'ACTUAL_DATE_CLOSED': object})

# convert to python datetime.date - will do in new columns
import datetime as dt
df['closed'] = [dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S', ).date() 
    for x in df['ACTUAL_DATE_CLOSED']]
df['transaction'] = [dt.datetime.strptime(x, '%Y-%m-%d', ).date() 
    for x in df['TRX_DATE']]

# find the difference between the two dates
df['difference'] = df['closed'] - df['transaction'] 

【讨论】:

  • 谢谢。这很有帮助。
猜你喜欢
  • 2020-10-19
  • 2021-05-08
  • 2019-01-03
  • 2013-02-21
  • 2018-05-29
  • 2014-07-17
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多