У меня есть очень большой файл CSV (~ 12 Гб), который выглядит примерно так:
PosX, Пози, posZ, с кодом события, ParentID, clockTime
-117.9853515625,60.2998046875,0.29499998688697815,0,0,0
-117.9853515625,60.32909393310547,0.29499998688697815,0,0,0
-117.9560546875,60.2998046875,0.29499998688697815,0,0,0
-117.9560546875,60.32909393310547,0.29499998688697815,0,0,0
-117.92676544189453,60.2998046875,0.29499998688697815,0,0,0
-117.92676544189453,60.32909393310547,0.29499998688697815,0,0,0
-118.04051208496094,60.34012985229492,4.474999904632568,0,0,0
-118.04051208496094,60.36941909790039,4.474999904632568,0,0,0
-118.04051208496094,60.39870834350586,4.474999904632568,0,0,0
Я хочу преобразовать этот файл CSV в формат HDF5, используя библиотеку h5py, а также уменьшить общий размер файла, задав типы полей / индексов i.G. говоря:
Сохранить posX, posY и posZ как float32. Сохраните eventID, parentID и clockTime как int32 или что-то в этом духе.
Примечание: мне нужно разбить данные на части во время чтения, чтобы избежать ошибок памяти.
Однако я не могу получить желаемый результат. Что я уже пробовал:
Используя собственные методы Pandas, следуя этому руководству: Как написать большой CSV-файл в hdf5 на python?
Это создает файл, но я почему-то не могу изменить типы, и файл остается слишком большим (~ 10,7 ГБ). Типы полей: float64 и int64.
Я также пытался разбить CSV на части (используя split -n x myfile.csv) перед началом работы с приращениями. Я столкнулся с некоторыми ошибками в начале и конце каждого файла, которые я смог исправить, удалив указанные строки с помощью sed. Затем я опробовал следующий код:
import pandas as pd
import h5py
PATH_csv = "/home/MYNAME/Documents/Workfolder/xaa" #xaa is my csv increment
DATA_csv = pd.read_csv(PATH_csv)
with h5py.File("pct_data-hdf5.h5", "a") as DATA_hdf:
dset = DATA_hdf.create_dataset("posX", data=DATA_csv["posX"], dtype="float32")
К сожалению, это создало файл и таблицу, но не записало в нее никаких данных.
Expectation
Создание файла HDF5, содержащего данные большого файла CSV, а также изменение типа переменной каждого индекса.
Если что-то неясно, пожалуйста, попросите у меня разъяснений. Я еще новичок!