首页 > 解决方案 > 如果值是数组而不是单个值,则在熊猫数据框中删除行

问题描述

我有一个数据框,其中一列有一些带有数组值的行,而不是单个 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()

标签: pythonpandassklearn-pandas

解决方案


您可以按您想要的值进行过滤

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'])

推荐阅读