1

「 HDFStore 例外のトラブルシューティング方法: 正しいアトム タイプが見つかりません」で提起されたものと同じ問題に直面しています。

pandas のドキュメントStoring Mixed Types in a Table に示されている例に減らします。

この例の要点は、appendaDataFrameに欠損値がいくつかあること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
4

1 に答える 1

2

問題は、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

于 2013-03-28T10:13:25.987 に答える