異なる列のdataFrameをhdf5ファイルに保存したい(以下のデータタイプの抜粋を見つける)。混合データとカテゴリを含むデータフレームをhdf5に格納
In [1]: mydf
Out [1]:
endTime uint32
distance float16
signature category
anchorName category
stationList object
いくつかの列(上記の私の抜粋で署名とanchorName)を変換する前に、私は(かなり正常に動作している)、それを保存するために、次のようなコードを使用:
path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', complevel=9, complib='bzip2')
しかし、それは、カテゴリでは動作しません。
path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', format='t', complevel=9, complib='bzip2')
各項目が文字列のリストであるstationListという列を削除すると、問題なく動作します。しかし、このコラムでは、次の例外があります。
Cannot serialize the column [stationList] because
its data contents are [mixed] object dtype
データフレームを保存するにはどうすればコードを改善する必要がありますか?
パンダのバージョン:0.17.1
Pythonバージョン:2.7.6(これはcompabilityの理由にそれを変更することはできません)
EDIT1(いくつかのサンプルコード):
import pandas as pd
mydf = pd.DataFrame({'endTime' : pd.Series([1443525810,1443540836,1443609470]),
'distance' : pd.Series([454.75,477.25,242.12]),
'signature' : pd.Series(['ab','cd','ab']),
'anchorName' : pd.Series(['tec','ing','pol']),
'stationList' : pd.Series([['t1','t2','t3'],['4','t2','t3'],['t3','t2','t4']])
})
# this works fine (no category)
mydf.to_hdf('tmp_without_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
for col in ['anchorName', 'signature']:
mydf[col] = mydf[col].astype('category')
# this crashes now because of category data
# mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
# switching to format='t'
# this caused problems because of "mixed data" in column stationList
mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
mydf.pop('stationList')
# this again works fine
mydf.to_hdf('tmp_with_cat_without_stationList.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
edit2: 一方、私はこの問題を取り除くためにさまざまなことを試みました。これらのうちの1つは、stationListの列をtupelsに変換し(変更することはできないため可能)、カテゴリにも変換することでした。しかしそれは何も変わらなかった。ここ は(単に完全性のために)私は、変換ループの後に追加された行は、次のとおりです。
mydf.stationList = [tuple(x) for x in mydf.stationList.values]
mydf.stationList.astype('category')
これは質問ですか?また、テストデータフレームを作成するための実際のコードを投稿した場合にも役立ちます。 – Goyo
それは問題です。私は他のいくつかのスクリプトによって保存された他のファイルからデータを取得します。私は私の問題を示すことができる基本的なデータ生成を作成しようとします。 – AnnetteC
これまでカテゴリとリスト/タプルの両方を同じhdf5形式で保存することはできないようです(これは将来修正される可能性があります)。私はあなたの要求についてもっと知らなくても何を変えるべきか教えてくれません。おそらく文字列として文字列を残して、多分stationList項目の別の表現を選択する...あまりにも多くのオプションがあります。 – Goyo