Сохраняйте разреженный фрейм данных pandas в файлы разных типов.Python

Программы на Python
Anonymous
Сохраняйте разреженный фрейм данных pandas в файлы разных типов.

Сообщение Anonymous »


Я работаю с данными Интернета вещей из одного источника, который отправляет тонны разреженных данных по показаниям датчиков. Чтобы сделать снимки для анализа, я пытаюсь экспортировать их в небольшой файл и прочитать его позже как разреженный фрейм данных panda, чтобы снизить использование памяти.

С версией pandas 1.0 многое изменилось, и я застрял :-(

Ниже мой рабочий процесс тестирования
[*]Создайте несколько фиктивных разреженных данных IoT с разными типами данных (int, float, строка как категория, строка, дата) [*]конвертировать их в фрейм данных panda (работает нормально) [*]сохраните их (чтобы найти различия в разреженных данных) --> Ошибки [*]конвертировать фрейм панды в разреженный фрейм данных --> Ошибка работала до версии 1.0 [*]сохраните их (чтобы найти различия в разреженных данных) --> Ошибки
Вопрос:
[*]Пожалуйста, кто знает, что не так и как это исправить. [*]Правильен ли мой подход к разреженному фрейму данных в новом стиле панды?
Большое спасибо

Сначала создайте несколько разреженных входных данных

импортировать дату и время импортировать систему время импорта импортировать случайный импортировать панд как pd из отображения импорта IPython.display, HTML входные_данные = список() # создаем входные данные для разреженной матрицы с разными типами dtypes столбцы = список(карта(chr, диапазон(ord('F'), ord('Z') - 1))) категория = ['Категория A', 'Категория B', 'Категория C'] random.seed('dsgsdf') chunk_size = 100 * 1000 # для тестирования больших или меньших наборов данных для строки в диапазоне (1 * chunk_size): г = дикт() r['A'] = строка если random.randint(0, 9) >= 3: r['B'] = str(datetime.datetime.now()) # немного усложняем преобразование даты и времени если random.randint(0, 9) >= 5: r['C'] = категория[random.randint(0, len(категория) - 1)] если random.randint(0, 9) >= 9: r['D'] = random.randint(0,1000) если random.randint(0, 9) >= 9: r['E'] = pd.util.testing.rands(4) # случайная строка = нет категории r[columns[random.randint(0, len(columns) - 1)]] = float(random.randint(0, 1000)/2) input_data.append(r) Преобразовать в плотный фрейм данных pandas

dense_df = pd.DataFrame(input_data) Density_df = Densent_df.reindex(sorted(dense_df.columns), axis=1) # сортировка по имени столбца плотность_df['B'] = pd.to_datetime(dense_df['B'], format='%Y-%m-%d %H:%M:%S.%f') Density_df['C'] = Densent_df['C'].astype('category') # строки как категория Density_df = Densent_df.convert_dtypes() # без этой строки экспорт работает, но со строкой меньше использования памяти Сохраняйте плотную матрицу на диск в разных форматах. Это не работает со строкой .convert_dtypes()

dense_df.to_hdf("data/dense-data-c0.h5", key='my',complevel=0,mode='w',format= 'стол') Density_df.to_hdf("data/dense-data-c9.h5", key='my',complevel=9,mode='w',format='table') Density_df.to_pickle("данные/плотные-данные.pkl.zip") Density_df.to_parquet("data/dense-data.parquet.gzip",compression="gzip",allow_truncated_timestamps=True) Density_df.to_parquet("data/dense-data.parquet",allow_truncated_timestamps=True) Density_df.to_pickle("данные/плотные-данные.pkl") Density_df.to_json("данные/плотные-данные.json") Преобразуйте в разреженную матрицу, чтобы сэкономить память. Это работало до версии pandas v1.0

импортировать numpy как np начало = время.время() разреженный_df = плотный_df.copy() # определяем некоторые разреженные типы данных dtype_float = pd.SparseDtype('float') dtype_int = pd.SparseDtype('int') dtype_str = pd.SparseDtype('строка') dtype_datetime = pd.SparseDtype('datetime64') sparse_df['B'] = sparse_df['B'].astype(dtype_datetime) sparse_df['E'] = sparse_df['E'].astype(dtype_str) sparse_df['D'] = sparse_df['D'].astype(dtype_int) Сохраняйте плотную матрицу на диск в разных форматах. Это не работает
sparse_df.to_hdf("data/sparse-data-c0.h5", key='my',complevel=0,mode='w',format= 'стол') sparse_df.to_hdf("data/sparse-data-c9.h5", key='my',complevel=9,mode='w',format='table') sparse_df.to_pickle("data/sparse-data.pkl.zip") sparse_df.to_parquet("data/sparse-data.parquet.gzip",compression="gzip",allow_truncated_timestamps=True) sparse_df.to_parquet("data/sparse-data.parquet",allow_truncated_timestamps=True) sparse_df.to_pickle("data/sparse-data.pkl") sparse_df.to_json("data/sparse-data.json")

Вернуться в «Python»