熊猫的气流错误:AttributeError:'Pendulum'对象没有属性'nanosecond'

时间:2019-04-01 15:40:45

标签: python pandas airflow pendulum

我有一个带有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_dateAirflow macro execution_date,而end_datenext_execution_date

我想问题在于dtype的日期时间dfstart_dateend_date中的日期时间不兼容,但是我有不知道如何解决。

我尝试删除时区,更改了dtype,但没有任何效果。

1 个答案:

答案 0 :(得分:0)

经过一番搜索,我找到了问题的根源和解决方案。

问题

此问题是由Airflow传递的两个宏引起的:

  • ns_match,它是start_date

  • execution_date,它是end_date

如Airflow文档所述,它们的类型为next_execution_date,而不是pendulum.datetime。这会导致与datetime.datetime的冲突。

pandas.DataFramepandas当前无法很好地协同工作,并且在this StackOverflow解决方案中很好地描述了该问题。

解决方案

该解决方案似乎使pendulumstart_dateend_datependulum.datetime

为此,我创建了一个简单的函数,该函数在转换为datetime.datetime之前就从转换为字符串。我相信他们是更好的方法,但这很简单又安全,因此我为什么要使用它。

以下是函数本身:

datetime.datetime