我有一个带有df
的pandas.DataFrame df.index
,它的内容如下:
DatetimeIndex(['2014-10-06 00:55:11.357899904',
'2014-10-06 00:56:39.046799898',
'2014-10-06 00:56:39.057499886',
'2014-10-06 00:56:40.684299946',
'2014-10-06 00:56:41.115299940',
'2014-10-06 01:03:52.764300108',
'2014-10-06 01:21:18.448499918',
'2014-10-06 01:21:18.457200050',
'2014-10-06 01:21:18.584199905',
'2014-10-06 01:21:18.594700098',
...
'2014-11-05 00:25:47.996000051',
'2014-11-05 00:56:45.081799984',
'2014-11-05 00:56:45.096899986',
'2014-11-05 05:50:57.639699936',
'2014-11-05 06:08:56.365000010',
'2014-11-05 06:11:20.519099950',
'2014-11-05 06:15:03.470400095',
'2014-11-05 06:15:03.981600046',
'2014-11-05 06:25:31.514300108',
'2014-11-05 06:25:59.310400009'],
dtype='datetime64[ns]', name='time', length=1000, freq=None)
我正在根据气流运行DAG,它停止在以下行df.loc[start_date:end_date]
上,说:
AttributeError: 'Pendulum' object has no attribute 'nanosecond'
如果不在Airflow中运行代码,则无法重现该错误。相同的代码在没有气流的情况下也可以正常运行。
start_date
是Airflow macro execution_date
,而end_date
是next_execution_date
。
我想问题在于dtype
的日期时间df
与start_date
和end_date
中的日期时间不兼容,但是我有不知道如何解决。
我尝试删除时区,更改了dtype
,但没有任何效果。
答案 0 :(得分:0)
经过一番搜索,我找到了问题的根源和解决方案。
问题
此问题是由Airflow传递的两个宏引起的:
ns_match
,它是start_date
宏
execution_date
,它是end_date
宏
如Airflow文档所述,它们的类型为next_execution_date
,而不是pendulum.datetime
。这会导致与datetime.datetime
的冲突。
pandas.DataFrame
和pandas
当前无法很好地协同工作,并且在this StackOverflow解决方案中很好地描述了该问题。
解决方案
该解决方案似乎使pendulum
和start_date
从end_date
到pendulum.datetime
。
为此,我创建了一个简单的函数,该函数在转换为datetime.datetime
之前就从转换为字符串。我相信他们是更好的方法,但这很简单又安全,因此我为什么要使用它。
以下是函数本身:
datetime.datetime