如何解决如果value是数组而不是单个值,请在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()
解决方法
您可以按所需的值进行过滤
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'])
,
尝试
handover_data.drop(handover_data[handover_data['S-PCI'].apply(lambda x: not str(x).isdigit())].index,inplace=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。