2

Python pandas DataFrame をソースとするローカル MongoDB へのかなり単純な挿入を行っています。基本的に、datframe.loc[n].to_dict() を呼び出して、df から直接辞書を取得しています。「オブジェクトをエンコードできません」というメッセージが表示される挿入を試みるまで、これまでのところすべて問題ありません。dict を直接見ると、すべてが良好に見えることが示されましたが、(この質問を書いているときに) dict の各タイプを確認することに気づき、長い ID 番号が単純な int ではなく numpy.int64 に変換されていることがわかりました (これは、 int が正常に挿入されるため、dict を手動で作成しました)。

そのため、この動作をオーバーライドできる to_dict への引数の追加に関する pandas のドキュメント内で何も見つけることができませんでした。そんなことに頼らなくても。

問題は、MongoDB に挿入するためにデータフレームの行を dict に変換する方法です。許容可能なコンテンツ タイプのみを使用していることを確認します。または、ここでさらにバックアップして、より簡単なアプローチを使用してMongo内のドキュメントになるデータフレーム?

ありがとう

リクエストに応じて、私が使用しているデータのサンプルを投稿に追加します。

{'Account Created': 'about 3 hours ago',
 'Followers': 13,
 'Following': 499,
 'Screen Name': 'XXXXXXXXXX',
 'Status': 'Alive',
 'Tweets': 12,
 'Twitter ID': 0000000000L}

これは、挿入時に失敗した to_dict 出力から直接。これを「テスト」辞書に直接コピーしたところ、完全に正常に機能しました。各dictの値を出力すると、次のようになります...

to_dict = ['Alive', 'a_aheref77', 'about 3 hours ago', 12, 13, 499, 0000000000L, ObjectId('551bd8cfae89e9370851aa64')]

test = ['Alive', 'XXXXXXXX', 'about 3 hours ago', 499, 13, 12, 0000000000, ObjectId('551bd6fdae89e9370851aa63')]

唯一の違い (私が知る限り) は Long int です。興味深いことに、Mongo を挿入すると、そのフィールドがドキュメント内で「Number Long」として表示されます。これがいくつかを明確にするのに役立つことを願っています。

4

2 に答える 2

-1

Python 整数は、Mongodb ではサポートされていない任意精度の数値として格納されます。最初に、それらを通常の int64 または string オブジェクトに変換する必要があります。コードを手動でコピーして貼り付けると、Python インタープリターが整数を適切に int64 に変換したため、おそらく機能しました。

于 2016-01-04T16:34:40.300 に答える