我面临的问题与How to trouble-shoot HDFStore Exception: cannot find the correct atom type中提出的问题相同。
我将其简化为熊猫文档Storing Mixed Types in a Table中给出的示例。
在此示例中,重点是append
一个DataFrame
,而HDFStore
缺少一些值。当我使用示例代码时,我最终得到一个atom type error
。
df_mixed
Out[103]:
A B C bool datetime64 int string
0 -0.065617 -0.062644 -0.004758 True 2001-01-02 00:00:00 1 string
1 1.444643 1.664311 -0.189095 True 2001-01-02 00:00:00 1 string
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaN 1 NaN
4 NaN NaN -0.618218 True NaN 1 NaN
5 NaN NaN 1.477307 True NaN 1 NaN
6 -0.287331 0.984108 -0.514628 True 2001-01-02 00:00:00 1 string
7 -0.244192 0.239775 0.861359 True 2001-01-02 00:00:00 1 string
store=HDFStore('df.h5')
store.append('df_mixed', df_mixed, min_itemsize={'values':50})
...
Exception: cannot find the correct atom type -> [dtype->object,items->Index([datetime64, string], dtype=object)] object of type 'Timestamp' has no len()
如果我按照链接文章(Jeff的答案)中的建议对有问题的类型(实际上是
dtype
类型)强制使用object
,我仍然会遇到相同的错误。我在这里想念什么?dtypes = [('datetime64', '|S20'), ('string', '|S20')]
store=HDFStore('df.h5')
store.append('df_mixed', df_mixed, dtype=dtypes, min_itemsize={'values':50})
...
Exception: cannot find the correct atom type -> [dtype->object,items->Index([datetime64, string], dtype=object)] object of type 'Timestamp' has no len()
感谢您的见解
解决了
我正在使用
pandas
0.10并切换到0.11-dev。正如Jeff推断的那样,麻烦在于NaN vs NaT。前熊猫版出品
df_mixed.ix[3:5,['A', 'B', 'string', 'datetime64']] = np.nan such that
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaN 1 NaN
而后者
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaT 1 NaN
最佳答案
问题是您的datetime64 [ns]系列中的NaN。这些必须是NaT。您如何构建此框架?您使用的是哪个熊猫版本?
可以使用0.11-dev吗? (这里还有更多选择)。尝试这个:df['datetime64'] = Series(df['datetime64'],dtype='M8[n2]')
此外,还有一些更有用的链接:http://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore
关于python - HDFStore异常:找不到正确的原子类型:基本情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15678451/