pandas:如何编写tz-aware datetime列,其中包含一些缺少要存储的数据

时间:2014-07-02 05:48:55

标签: python pandas

我有数据框,其中包含我需要写入商店的时区感知日期时间列。但是,只要我有任何缺失值,写入就会失败。我设置了一个简单的例子:

pd.set_option('io.hdf.default_format','table')
mdstore = pd.HDFStore(storeFile, complevel=9, complib='blosc')
utcdate = pd.to_datetime('20000101', utc=True)
df1 = pd.DataFrame(columns=['UTCdatetime'], data=utcdate, index=pd.date_range('20140627', periods=2))
mdstore['/Test'] = df1

这样可以正常工作,因为它没有缺失值。如果我引入了缺失值,但我得到了两个不同的错误之一。

错误1:如果我添加了另一列,只填充了两行中的一行,我收到错误:

df1.loc['20140628','UTCdatetime2'] = utcdate
print(df1)
mdstore['/Test'] = df1
                      UTCdatetime               UTCdatetime2
2014-06-27  2000-01-01 00:00:00+00:00                        NaN
2014-06-28  2000-01-01 00:00:00+00:00  2000-01-01 00:00:00+00:00

Exception: cannot find the correct atom type -> [dtype->object,items->Index([u'UTCdatetime', u'UTCdatetime2'], dtype='object')] 'float' object has no attribute 'tzinfo'

错误2:如果我添加了一个填充了NA的新行,我会得到一个不同的错误:

df1.loc[pd.to_datetime('20140629'),'UTCdatetime'] = pd.NaT
print(df1)
mdstore['/Test'] = df1
                      UTCdatetime
2014-06-27  2000-01-01 00:00:00+00:00
2014-06-28  2000-01-01 00:00:00+00:00
2014-06-29                        NaN

TypeError: too many timezones in this block, create separate data columns

我希望找到一个不会以任意日期填写NaN的解决方法。我使用fillna尝试pd.NaT,但没有做任何事情。谢谢!

PS我也遇到了combine_first和tz(pandas tzinfo lost by combine_first)的问题 - 看起来并不相关,只是以防万一。

0 个答案:

没有答案