使用 Period 数据类型查询数据帧时 Jupyter 内核崩溃

Jupyter kernel crash when querying dataframe with Period datatype

我遇到了一个有趣的问题。我有一个包含三列的数据集,日期以 YYYYMM 格式存储为整数。首先,我尝试将它们转换为日期时间,但有些日期超出了日期时间数据类型的 1677-09-21 下限。所以我使用了解决方法in the documentation

def conv(x):
    return pd.Period( year=x // 10000, month=x // 100 % 100, day=x % 100, freq='D' )

# First, append '01' to create format YYYYMMDD, then apply conversion function
columns = ['indep_date', 'cow_system_ind_date', 'gw_system_ind_date']
for column in columns:
   icow[column] = ( icow[column].astype('str') + '01' ).astype('int').apply(conv)

一切正常。但是,应用此功能后,我无法再通过查询任何列来选择我的数据框。如果我尝试其中任何一个,Jupyter 内核就会崩溃:

icow.query( 'column != 200' )
icow[ icow['col1'] != icow['col2'] ]
icow[ icow['col1'].ne( icow['col2'] ) ]

我尝试了其他各种方法,但都导致内核崩溃和重启。有趣的是,如果我只是 运行 内部部分,它 运行 没问题。例如:

icow['col1'] != icow['col2']

正确地 returns 一系列 True/False 值。一旦我包装它以尝试取回数据框的选择,崩溃。

如果我删除句点 [D] 列(或跳过转换),我的查询 运行 没问题。任何人都知道为什么在我的数据框中使用这些句点 [D] 数据类型会导致这个问题,我该如何解决?

已解决:问题是三个日期列之一在原始数据集中包含许多带有 -9 的条目。有趣的是,将字符串表示形式转换为 Period 的函数并没有失败,但它以某种方式破坏了数据帧,使得对任何列的查询导致内核崩溃。通过将 -9 日期设置为过去的日期 0001-01-01,一切正常。