快速删除列表元素(如果包含在pandas数据框中)

史密斯

我有一个字符串列表和两个单独的pandas数据框。数据帧之一包含NaN。我试图找到一种快速的方法来检查列表中的任何项目是否包含在任何一个数据框中,如果是,则从列表中删除它。

当前,我通过列表理解来做到这一点。我首先将两个数据帧连接起来。然后,我遍历该列表,并使用if语句检查它是否包含在串联的dataframe值中。

patches = [patch for patch in patches if not patch in bad_patches.values]

我的字符串列表的前5个元素:

patches[1:5]
['S2A_MSIL2A_20170613T101031_11_52',
 'S2A_MSIL2A_20170717T113321_35_89',
 'S2A_MSIL2A_20170613T101031_12_39',
 'S2A_MSIL2A_20170613T101031_11_77']

我的一个数据框的示例,第二个相同,但包含的行较少。注意第一行包含补丁[2]。

cloud_patches.head()
0  S2A_MSIL2A_20170717T113321_35_89

1  S2A_MSIL2A_20170717T113321_39_84

2   S2B_MSIL2A_20171112T114339_0_13

3   S2B_MSIL2A_20171112T114339_0_52

4   S2B_MSIL2A_20171112T114339_0_53

串联的数据框:

bad_patches = pd.concat([cloud_patches, snow_patches], axis=1)
bad_patches.head()
0  S2A_MSIL2A_20170717T113321_35_89  S2B_MSIL2A_20170831T095029_27_76

1  S2A_MSIL2A_20170717T113321_39_84  S2B_MSIL2A_20170831T095029_27_85

2   S2B_MSIL2A_20171112T114339_0_13  S2B_MSIL2A_20170831T095029_29_75

3   S2B_MSIL2A_20171112T114339_0_52  S2B_MSIL2A_20170831T095029_30_75

4   S2B_MSIL2A_20171112T114339_0_53  S2B_MSIL2A_20170831T095029_30_78

和尾巴,显示一栏的NaN:

bad_patches.tail()
61702  NaN   S2A_MSIL2A_20180228T101021_43_6

61703  NaN   S2A_MSIL2A_20180228T101021_43_8

61704  NaN  S2A_MSIL2A_20180228T101021_43_11

61705  NaN  S2A_MSIL2A_20180228T101021_43_13

61706  NaN  S2A_MSIL2A_20180228T101021_43_16

列标题全都(不好地)命名为0。

补丁的第二个元素应删除,因为它包含在bad_patches的第一行中。我的方法确实有效,但是需要绝对的时间。Bad_patches是60,000行,并且补丁的长度是可变的。现在,对于1000个补丁的长度,它需要2.04秒,但是我需要扩展到500k补丁,因此希望有一种更快的方法。谢谢!

KenHBS

我将创建一组从价值观cloud_patchessnow_patches然后还创建一组patches

patch_set = set(cloud_patches[0]).union(set(snow_patches[0])
patches = set(patches)

现在,您只需patch_set从中的值减去中的所有值patches,您将只剩patches下在cloud_patchesnor中不显示的snow_patches

cleaned_list = list(patches - patch_set)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从数据框中的列表项中删除元素(如果未包含在另一个列表中)的绝佳方法

访问包含在列表中的公共元素数据框

如果未包含在列表中,则从pandas列中删除它们

如果数据框的元素在列表中,则删除它们

从Pandas数据框中的列表中删除元素

pandas str。包含在Pyspark的pyspark数据框中

str。包含在pandas数据框中创建新列

从列名称列表中删除pandas数据框中的列的快速方法是什么

从包含数据框的列表中删除空数据框

如果列在Pandas中包含任何字符串值,则从数据框中删除值

如果任何特定列包含特定值,则删除 pandas 数据框中的行

逐行循环遍历 Pandas 数据框,并将数据框的值包含在文件名中

Python如何在包含列表作为元素的数据框中删除不需要的逗号

Pandas 访问数据框中的列表元素?

检查元素是否在列表中,如果条件满足,则写入 Pandas 数据框中的新列

如果项目不在列表中,则从 Pandas 数据框中删除项目

从列表或组中删除元素如果它包含特定字符

如何使用python从pandas数据框转换的列表中删除带有空元素的行?

创建一个表以显示列表是否包含在数据框的分组列中

重建包含R中具有列表的元素的数据框

从数据框中删除包含字符列表之外的字符的行

如何删除包含空列表的数据框中的行?

从数据框中删除文本不包含列表项的行

如何知道一条记录是否已被修改或包含在 Pandas 数据框中

根据熊猫数据框中的条件从列表中删除元素

根据熊猫数据框中的条件从列表中删除元素

如何删除一个列表中未包含在另一个列表中的元素?

从 Pandas DF 中删除包含列表中元素的行

如果行号包含在集合中,如何删除行?