У меня есть HDFStore, где я вводить данные каждую ночь. Я задаюсь вопросом, сбой системы и т. Д., Я мог бы перезапустить процессы, поэтому я хочу убедиться, что если уже существует строка, в которой pandas не включает это при следующем запуске процесса. Есть ли способ искать дубликаты и не включать их?Pandas HDFStore: Опуская дубликаты
ответ
Если у вас есть уникальный индекс в вашем HDFStore вы можете использовать следующий подход:
создать образец DF:
In [34]: df = pd.DataFrame(np.random.rand(5,3), columns=list('abc'))
In [35]: df
Out[35]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
сохранить его в HDFStore:
In [36]: store = pd.HDFStore(r'd:/temp/t.h5')
In [37]: store.append('test', df, format='t')
Добавить новую строку в наш DF:
In [38]: df.loc[len(df)] = [-1, -1, -1]
In [39]: df
Out[39]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row, which is NOT in the HDF file
выберите индексы дублированных строк:
In [40]: idx = store.select('test', where="index in df.index", columns=['index']).index
проверка:
In [41]: df.query("index not in @idx")
Out[41]:
a b c
5 -1.0 -1.0 -1.0
Append к HDFStore только те строки, которые еще не были сохранены:
In [42]: store.append('test', df.query("index not in @idx"), format='t')
проверка:
In [43]: store.select('test')
Out[43]:
a b c
0 0.407144 0.972121 0.462502
1 0.044768 0.165924 0.852705
2 0.703686 0.156382 0.066925
3 0.912794 0.362916 0.866779
4 0.156249 0.625272 0.360799
5 -1.000000 -1.000000 -1.000000 # new row has been added
После попытки этого решения он отлично работает для небольших (~ 1 ГБ) HDF-магазинов, но с большими таблицами время поиска для индекса запроса не в @ idx' слишком большой. Это не будет проблемой, если вы хотите добавить данные редко, но в моем случае, потому что я «злоупотребляю» HDFstore, как если бы это была база данных, задержка слишком велика. –
@MakisTsantekidis, IMO это вполне естественно - мы хотим проверить дубликаты в индексе во всем файле HDF. Таким образом, чем больше HDF-файл, тем дольше он будет работать. В зависимости от вашего конкретного случая вы можете проверить «max (index)» в файле HDF и сравнить значения индекса в DF с этим «max_index_value» ... – MaxU
хорошее предложение, если индексы входящих «записей» отсортированы. Моя идея ускорения в случаях, когда индексы не поступают упорядоченным образом, заключается в том, чтобы запросить один раз для существующих (дублированных) индексов и сохранить их в памяти, чтобы проверить следующую партию записей. –
если вы получили dataframe в вашем коде, вы можете добавить данные в любом случае и применить к нему:
.drop_duplicates()
, который удалит любые дублированные данные из dataframe.
надежда, что помогает
К сожалению, данные слишком велики для хранения в кадре данных, поэтому этот подход может не работать – CodeGeek123
- 1. Опуская дубликаты
- 2. Pandas HDFStore странное поведение
- 3. Pandas HDFStore: изменение dtype индексов
- 4. Pandas HDFStore: медленный запрос для несоответствующей строки
- 5. На диске индексирование Pandas multiindexed HDFStore
- 6. Pandas, multiindex, date, HDFstore и frame_tables
- 7. use OR in hdfstore select pandas
- 8. Pandas читает HDFStore в бутылке - DeprecationWarning?
- 9. Pandas HDFStore выгружает данные из памяти
- 10. Pandas to_sql заменить дубликаты
- 11. Сжатие данных с HDFStore
- 12. HDFStore select_as_multiple generator
- 13. Pandas дубликаты колонн со смещением
- 14. Pandas script не удаляет дубликаты
- 15. Pandas HDFStore - Получить последнюю запись из нескольких таблиц
- 16. Pandas «Group By» Запрос на большие данные в HDFStore?
- 17. Pandas DataFrame/HDFStore Pass Несколько форматов даты через CSV
- 18. Как эффективно перестроить таблицу pandas hdfstore, когда append failed
- 19. Проверьте, является ли узел PyTables в pandas HDFStore табличным
- 20. pandas HDFStore выбрать строки с ненулевыми значениями в столбце данных
- 21. Pandas HDFStore: сохранение и получение серии с индексом иерархического периода
- 22. Ошибка поиска мультииндекса Pandas DataFrame из HDFStore (в формате таблицы)
- 23. Ошибка UnicodeDecode при чтении специальных символов из HDFStore с Pandas
- 24. Как обрабатывать исключение min_itemsize в письме в pandas HDFStore
- 25. Использование компрессии с помощью Pandas и HD5/HDFStore
- 26. Pandas HDFStore MultiIndex DataFrames: как эффективно получить все индексы
- 27. HDFStore start stop not working
- 28. HDFStore: Выберите, если столбец в массиве
- 29. HDFStore: table.select и использование ОЗУ
- 30. выбирать строки, сравнивая столбцы с помощью HDFStore
Это немного расплывчатый, правильный путь - это сообщение, в котором четко указывается, какой процесс вы выполняете, чтобы мы могли найти вам лучшее решение в соответствии с вашими потребностями. – Shubham
Я согласен с @SRingne. Было бы полезно узнать, есть ли у вас что-то похожее на «первичный ключ», который помогает __uniquely__ идентифицировать каждую строку ... Можете ли вы разместить образец данных (3-5 строк)? – MaxU