我正在扫描日期列表以在Pandas数据框中找到最短日期,然后从所有其他日期中减去最短日期,以获取最小日期与其他日期之间的天数。它在我的计算机上使用以下代码运行:
MinDay = a1_raw_data['EventDate'].min()
a1_raw_data['DaysSince'] = (a1_raw_data['EventDate'] - MinDay) / np.timedelta64(1, 'D')
我现在正在云上尝试它,它似乎通过将其解释为字符串来给我带来错误:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
此外,我还尝试将两个日期都转换为如下日期:
MinDay = a1_raw_data['EventDate'].min()
MinDay = pd.to_datetime(MinDay)
a1_raw_data['EventDate'] = pd.to_datetime(a1_raw_data['EventDate'])
a1_raw_data['DaysSince'] = (a1_raw_data['EventDate'] - MinDay) / np.timedelta64(1, 'D')
错误:
TypeError: data type "datetime" not understood
并修改了减法,如下所示:
MinDay = a1_raw_data['EventDate'].min()
MinDay = pd.to_datetime(MinDay)
a1_raw_data['EventDate'] = pd.to_datetime(a1_raw_data['EventDate'])
a1_raw_data['DaysSince'] = (a1_raw_data['EventDate'].subtract(MinDay)) / np.timedelta64(1, 'D')
错误:
TypeError: ufunc subtract cannot use operands with types dtype('<M8[ns]') and dtype('O')
任何有关减法的想法都会受到赞赏吗?
谢谢
更新
多亏了Pygirl给我的例子,我看来它的工作方式如下:
MinDay = a1_raw_data['EventDate'].min()
MinDay = pd.to_datetime(MinDay)
MinDay = np.array(MinDay,dtype=np.datetime64)
EventDate = pd.to_datetime(a1_raw_data['EventDate'])
EventDate = np.array(EventDate,dtype=np.datetime64)
a1_raw_data['DaysSince'] = EventDate - MinDay
谢谢。但是现在由于必须将a1_raw_data ['EventDate']转换为np.arrays()而非常慢。有人可以建议更有效的方法吗?就像我在台式机上进行操作时一样,下面的行正在运行
MinDay = a1_raw_data['EventDate'].min()
a1_raw_data['DaysSince'] = (a1_raw_data['EventDate'] - MinDay) / np.timedelta64(1, 'D')
现在,在不同的计算机上需要以上所有条件。我只是像示例中那样将MinDay转换为np.array()进行了尝试,但这没有用。
谢谢