#python #pandas #dataframe #filter
Вопрос:
У меня есть панды df:
df
DEtoDK DKtoDE
self other self other
2021-01-01 00:00:00 00:00 0.0 NaN 2230.08 NaN
2021-01-01 01:00:00 00:00 0.0 0.0 1887.72 2230.08
2021-01-01 02:00:00 00:00 0.0 0.0 1821.33 1887.72
2021-01-01 03:00:00 00:00 0.0 0.0 1743.20 1821.33
2021-01-01 04:00:00 00:00 0.0 0.0 1720.78 1743.20
... ... ... ... ...
2021-05-31 19:00:00 00:00 0.0 0.0 782.88 892.16
2021-05-31 20:00:00 00:00 0.0 0.0 872.96 782.88
2021-05-31 21:00:00 00:00 0.0 0.0 1165.36 872.96
2021-05-31 22:00:00 00:00 0.0 0.0 1418.32 1165.36
2021-05-31 23:00:00 00:00 0.0 0.0 1393.28 1418.32
[3624 rows x 4 columns]
Я хотел бы отфильтровать этот df с некоторыми условиями, например, если значения (DEtoDK, self)
или (DKtoDE, self)
равны 0. Для этого я использую следующее:
df.loc[(df[('DEtoDK', 'self')].values == 0) | (df[('DKtoDE', 'self')].values == 0)]
И это работает, однако, когда df не имеет никаких значений 0, я ожидал, что сгенерирую пустой фрейм данных, однако я получаю ошибку ключа.
df.loc[(df[('DEtoDK', 'self')].values == 'test') | (df[('DKtoDE', 'self')].values == 'test')]
KeyError: False
таким образом , условия генерируются False
вместо пустого массива, поэтому панды не могут найти. Как я могу исправить это поведение?
Ответ №1:
Нет необходимости в values
:
df.loc[(df[('DEtoDK', 'self')] == 0) | (df[('DKtoDE', 'self')] == 0)]
Комментарии:
1. работает тай! и из
.values
-за того, что я получал ошибку для'test'