1 つの列に gps 座標のリストが float-tuples として含まれている大きな csv ファイルがあります。もちろん、ファイルを pandas データフレームとして読み込むと、それらの型は単なる文字列であり、あまり役に立ちません。
私がやりたいことは、文字列を浮動小数点タプルのリストに変換し、データフレームに簡単にロードしてクエリを実行できる形式で保存することです。これに関する重要な制約は、大きなデータセット全体に対してこの変換を計算できないことです。そのため、バイナリ オブジェクトをダンプすることはできません。
私が読んだことから、HDFストアは必要な形式でデータを保存し、行を追加できるようにする必要があるようです。そのため、文字列をGPSエントリに少しずつ変換できるため、メモリに問題は発生しません制限。
ただし、HDF ファイルを作成しようとすると、次のようになります。
TypeError: Cannot serialize the column [POLYLINE] because
its data contents are [mixed] object dtype
このエラーを生成するコードは次のとおりです。
df.to_hdf(filename, 'data', mode='w', format='table')
df には、変換関数を POLYLINE 列にマッピングした後、元のデータのスライスが含まれています。これは、少なくとも、この列のすべてのデータが同じ型であることを意味するはずです。
生成されたエラーを解決するにはどうすればよいですか、またはうまく機能する可能性のある他の方法はありますか?
編集:変換前の df.head() は次のようになります:
TRIP_ID CALL_TYPE ORIGIN_CALL ORIGIN_STAND TAXI_ID \
0 1372636858620000589 C NaN NaN 20000589
1 1372637303620000596 B NaN 7 20000596
2 1372636951620000320 C NaN NaN 20000320
3 1372636854620000520 C NaN NaN 20000520
4 1372637091620000337 C NaN NaN 20000337
TIMESTAMP DAY_TYPE MISSING_DATA \
0 1372636858 A False
1 1372637303 A False
2 1372636951 A False
3 1372636854 A False
4 1372637091 A False
POLYLINE
0 [[-8.618643, 41.141412], [-8.618499, 41.141376...
1 [[-8.639847, 41.159825999999995], [-8.64035099...
2 [[-8.612964, 41.140359000000004], [-8.613378, ...
3 [[-8.574678, 41.151951], [-8.574705, 41.151942...
4 [[-8.645994, 41.18049], [-8.645949, 41.180517]...
POLYLINE 列を変換した後 (スペースを節約するために他の列を除外します):
POLYLINE
0 [[-8.618643, 41.141412], [-8.618499, 41.141376...
1 [[-8.639847, 41.159826], [-8.640351, 41.159871...
2 [[-8.612964, 41.140359], [-8.613378, 41.14035]...
3 [[-8.574678, 41.151951], [-8.574705, 41.151942...
4 [[-8.645994, 41.18049], [-8.645949, 41.180517]...
結果の出力もタプルのリストではなくリストのリストになるように変更しました。これらの 1 つの要素を調べると、変換前のエントリが文字列であり、内部リストの 1 つの項目が浮動小数点数であることがわかりますが、出力方法ではこれが明確になりません。