Все, что вам нужно сделать, это использовать:
pd.to_datetime(date,format='%Y&%W')
Это дало ошибку, что Day следует упомянуть, чтобы преобразовать его в datetime. Таким образом, чтобы решить, что мы добавляем -1 в конец (что означает понедельник ... вы можете добавить любое конкретное значение от 0 до 6, где каждое представляет день).
Затем возьмите «день недели», используя дополнительный% w в формате, и он будет работать:
pd.to_datetime(date.apply(lambda x: str(x)+'-0'), format="%Y%W-%w")
Помните, что для выполнения любой из вышеперечисленных операций значение в кадре даты должно быть серия должна быть строковым объектом. Если нет, вы можете легко конвертировать их, используя d.astype (str), а затем выполнить все эти операции.
Вы имеете в виду комментарий в JavaDoc :
Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.
Я считаю, что это относится к коллекции list
в вашем примере:
blockingQueue.drainTo(list);
означает, что вы не можете изменять list
одновременно с удалением из blockingQueue
в список
. Однако блокирующая очередь внутренне синхронизируется, поэтому при вызове dryTo
, помещает, а (см. Примечание ниже) получает блокировку. Если бы он этого не сделал, он не был бы действительно потокобезопасным. Вы можете посмотреть исходный код и убедиться, что dryTo
является потокобезопасным в отношении самой очереди блокировки.
С другой стороны, вы имеете в виду, что когда вы вызываете dryTo
, вы хотите, чтобы он заблокировать до тех пор, пока в очередь не будет добавлен хотя бы один объект? В этом случае у вас мало выбора, кроме:
list.add(blockingQueue.take());
blockingQueue.drainTo(list);
для блокировки до тех пор, пока один или несколько элементов не будут добавлены, а затем слить всю очередь в коллекцию список
.
Примечание: Начиная с Java 7, для получения и помещения используется отдельная блокировка , Операции Put теперь разрешены во время операции DrainTo (и ряда других операций Take).
Я нашел эту модель полезной.
List<byte[]> blobs = new ArrayList<byte[]>();
if (queue.drainTo(blobs, batch) == 0) {
blobs.add(queue.take());
}
С доступным API, я не думаю, что вы станете намного более элегантным. Кроме того, вы можете удалить тест размера.
Если вы хотите атомарно получить непрерывную последовательность элементов, даже если другая операция удаления совпадает, я не верю, что даже DrainTo
гарантирует это.