python - 如果值是数组而不是单个值,则在熊猫数据框中删除行
问题描述
我有一个数据框,其中一列有一些带有数组值的行,而不是单个 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'])
推荐阅读
- matlab - Question regarding the scope of my global variable {matlab}
- java - 如何配置 POJO 以便将整数值索引为文本而不是整数?
- java - JGit:我想获取特定分支中的所有文件和文件夹
- json - 当 process.env json 具有正确的值时,process.env.NODE_ENV 返回错误的值
- c++ - 为自己的目的使用标准的 std::exception 子类是标准做法吗?
- java - 无法解析 R.array.items 中的“数组”(android studio)
- c++ - 不明白为什么会出现此错误:成员引用基类型“Shape *”不是结构或联合
- python - 有人可以解释这个 pytorch 神经网络代码吗?这里有两种不同的神经网络还是一种?
- jquery - 每天获取数据,如果没有记录显示为零
- javascript - 检查单选按钮中的所有值(vuetify)?