Удалить список дней в разном временном разрешении (поминутные данные) - PullRequest
0 голосов
/ 05 августа 2020
• 1000 exclude in df
0    2020-05-18
1    2020-05-19
3    2020-05-21
4    2020-05-22
5    2020-05-23
6    2020-05-24

Name: Time, dtype: datetime64[ns]

Я просто пробовал,

df[df['Time'] != incomplete_days]

Но в сообщении об ошибке говорится:

ValueError: Can only compare identically-labeled Series objects
  1. должен ли я сделать отметку времени (1 мин. разрешение) со списком дней, чтобы исключить их в df? Если да, то как я могу установить время с часом начала и часом окончания в определенные дни?
  2. Есть ли способ, которым мне не нужно делать метку времени с разрешением в 1 минуту?

(я уже вырезал неактуальные часы с 20:01 до 08:59 и сохранил часы с 09:00 до 20:00 в df. Не хочу снова делать почасовую метку времени со списком дней, которые нужно исключить. Я использовал следующие переменные, которые я использовал для вырезания нерелевантных часов)

start = time(6)
end = time(20)

----- Отредактировал Я сделал

df['Time'].dt.date

дает

0         2020-05-18
1         2020-05-18
2         2020-05-18
3         2020-05-18
4         2020-05-18
             ...    
110077    2020-08-02
110078    2020-08-02
110079    2020-08-02
110080    2020-08-02
110081    2020-08-02
Name: Time, Length: 69042, dtype: object

и

list_incomplete=incomplete_days.tolist()
list_incomplete

дает

[Timestamp('2020-05-18 00:00:00'),
 Timestamp('2020-05-19 00:00:00'),
 Timestamp('2020-05-21 00:00:00'),
 Timestamp('2020-05-22 00:00:00'),
 Timestamp('2020-05-23 00:00:00'),
 Timestamp('2020-05-24 00:00:00'),
 Timestamp('2020-05-25 00:00:00'),
 Timestamp('2020-05-26 00:00:00'),
 Timestamp('2020-05-27 00:00:00'),
 Timestamp('2020-05-28 00:00:00'),
 Timestamp('2020-05-29 00:00:00'),
 Timestamp('2020-05-30 00:00:00'),
 Timestamp('2020-05-31 00:00:00'),
 Timestamp('2020-06-01 00:00:00'),
 Timestamp('2020-06-02 00:00:00'),
 Timestamp('2020-06-03 00:00:00'),
 Timestamp('2020-06-10 00:00:00'),
 Timestamp('2020-07-02 00:00:00'),
 Timestamp('2020-07-05 00:00:00'),
 Timestamp('2020-07-06 00:00:00')]

Когда я это делаю

df.drop([df['Time'].dt.date not in incomplete_days],inplace=True)

, я получаю следующую ошибку:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

Я вижу, это очень близко, но что-то пошло не так ..

1 Ответ

1 голос
/ 05 августа 2020

Предположим, у вас есть два фрейма данных df и df1 с их столбцами в формате datetime:

df

    Date
0   2020-05-18 10:18:00
1   2020-05-18 10:19:00
2   2020-05-18 10:20:00
3   2020-05-18 10:21:00
4   2020-05-18 10:22:00
5   2020-07-20 12:00:00

df1

    incomplete_days
0   2020-05-18
1   2020-05-19
3   2020-05-21
4   2020-05-22
5   2020-05-23
6   2020-05-24

Вы можете использовать логическое индексирование и преобразовать оба столбца в строки с одинаковым форматом для сравнения. Используйте ~ с isin (что фактически «не входит») вместо !=. Вы не можете использовать != для сравнения строк со всей серией, поэтому ваш текущий метод является синтаксической ошибкой. Преобразование формата в рамках логической индексации [] сохранит исходный формат вашего фрейма данных и не изменится с даты на строку.

df = df[~(df['Date'].dt.strftime('%Y-%m-%d').isin(df1['incomplete_days'].dt.strftime('%Y-%m-%d')))]

Out[38]: 
Date
5 2020-07-20 12:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...