#python #pandas #sklearn-pandas
#python #pandas #sklearn-pandas
Вопрос:
У меня есть фрейм данных, где в одном из столбцов есть несколько строк со значением массива вместо одного значения int64. Я хочу удалить все такие строки.
Для этого я использую следующий код, но это не работает (по понятным причинам, поскольку он сравнивается со строкой).
handover_data.drop(handover_data[handover_data['S-PCI'] == '[105 106]'].index, inplace=True)
В фрейме данных оно должно иметь либо 105, либо 106, не оба, но некоторые из вариантов имеют [105 106]
Какие есть способы сравнить это, чтобы проверить, есть ли массив вместо ожидаемого значения:
Набор данных выглядит следующим образом:
S-Cell ID N-Cell ID S-PLMN S-PCI N-PCI S-BW N-BW
73 257 0 105 105 106 2147483647 2147483647
S-EARFCN N-EARFCN
73 3025 3025 30102
Elapsed RT Time (ms) RSRP-105 RSRP-106 RSRQ-105 RSRQ-106
73 41846000000 2947094.0 -84 -90 -4 -14
Редактировать:
s_Cell = 105
for i, j in hd_data.iterrows():
if(hd_data.at[i,'S-PCI'].all() != s_Cell):
hd_data.at[i,'H_Event'] = 1
Это сбой со следующей ошибкой:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-399-d4c47a34a73e> in <module>
19 print(i)
20 print(handover_data.at[i,'S-PCI'])
---> 21 if(handover_data.at[i,'S-PCI'].all() != starting_Cell):
22 handover_data.at[i,'Handover_Event'] = 1
23 #handover_data.at[i,'Time_to_Handover'] = handover_data.at[i,'TimeInterval']-last_HO_time
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Комментарии:
1. Проверить с помощью isin ?
2. можете ли вы опубликовать несколько строк вашего df?
3. используется
isin()
для фильтрации строк, которые находятся в списке / массиве
Ответ №1:
вы можете фильтровать по нужным значениям, например
wanted_values = [105, 106]
handover_data = handover_data[handover_data['S-PCI'].isin(wanted_values)]
если вы хотите удалить элементы, которые конкретно являются списком, то это было бы немного более ресурсоемким
import numpy as np
handover_data = handover_data.apply(lambda x: np.nan if isinstance(x['S-PCI'], list) else x).dropna(subset=['S-PCI'])
Ответ №2:
попробуйте это
handover_data.drop(handover_data[handover_data['S-PCI'].apply(lambda x: not str(x).isdigit())].index, inplace=True)