「 HDFStore 例外のトラブルシューティング方法: 正しいアトム タイプが見つかりません」で提起されたものと同じ問題に直面しています。
pandas のドキュメントStoring Mixed Types in a Table に示されている例に減らします。
この例の要点は、append
aDataFrame
に欠損値がいくつかあること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()
リンクされた投稿(ジェフの回答)で提案されているよう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()
洞察をありがとう
解決した
私は 0.10 を使用していて、 0.11-devpandas
に切り替えました。Jeff が推測したように、問題はNaN と NaTにありました。
以前の pandas バージョンが作成されました
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