サイズが 800 GB の大きな csv からデータを解析しています。データの行ごとに、これを pandas データフレームとして保存します。
readcsvfile = csv.reader(csvfile)
for i, line in readcsvfile:
# parse create dictionary of key:value pairs by csv field:value, "dictionary_line"
# save as pandas dataframe
df = pd.DataFrame(dictionary_line, index=[i])
ここで、これを HDF5 形式に保存し、h5 を csv ファイル全体であるかのようにクエリします。
import pandas as pd
store = pd.HDFStore("pathname/file.h5")
hdf5_key = "single_key"
csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"]
これまでの私のアプローチは次のとおりです。
import pandas as pd
store = pd.HDFStore("pathname/file.h5")
hdf5_key = "single_key"
csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"]
readcsvfile = csv.reader(csvfile)
for i, line in readcsvfile:
# parse create dictionary of key:value pairs by csv field:value, "dictionary_line"
# save as pandas dataframe
df = pd.DataFrame(dictionary_line, index=[i])
store.append(hdf5_key, df, data_columns=csv_columns, index=False)
つまり、各データフレームdf
を 1 つのキーで HDF5 に保存しようとします。ただし、これは失敗します。
Attribute 'superblocksize' does not exist in node: '/hdf5_key/_i_table/index'
したがって、最初にすべてを 1 つの pandas データフレームに保存しようとすることができます。
import pandas as pd
store = pd.HDFStore("pathname/file.h5")
hdf5_key = "single_key"
csv_columns = ["COL1", "COL2", "COL3", "COL4",..., "COL55"]
readcsvfile = csv.reader(csvfile)
total_df = pd.DataFrame()
for i, line in readcsvfile:
# parse create dictionary of key:value pairs by csv field:value, "dictionary_line"
# save as pandas dataframe
df = pd.DataFrame(dictionary_line, index=[i])
total_df = pd.concat([total_df, df]) # creates one big CSV
HDF5形式に保存するようになりました
store.append(hdf5_key, total_df, data_columns=csv_columns, index=False)
total_df
ただし、すべての csv 行を HDF5 形式に保存するための RAM/ストレージがあるとは思いません。
では、各「単一行」の df を HDF5 に追加して、最終的に 1 つの大きなデータフレーム (元の csv など) になるようにするにはどうすればよいですか?
編集: データ型が異なる csv ファイルの具体的な例を次に示します。
order start end value
1 1342 1357 category1
1 1459 1489 category7
1 1572 1601 category23
1 1587 1599 category2
1 1591 1639 category1
....
15 792 813 category13
15 892 913 category5
....