【发布时间】:2020-10-10 14:06:45
【问题描述】:
我有一个按升序排序的熊猫系列。它的值类似于 1,2,3,...,73514,73515,73516。但是列数是 73515。
我需要找出缺失的值。怎么找?
【问题讨论】:
-
提供有关您的数据的更多信息。字符串的值是数字吗?
标签: python pandas series missing-data
我有一个按升序排序的熊猫系列。它的值类似于 1,2,3,...,73514,73515,73516。但是列数是 73515。
我需要找出缺失的值。怎么找?
【问题讨论】:
标签: python pandas series missing-data
假设列名是 int 类型,您也可以使用 python 集:
set(range(1,73516)).difference(set(df.columns))
或
set(range(1,73516)) - set(df.columns)
【讨论】:
假设我理解正确:
for i in range(1,73517):
i if i not in series.to_list() else print('',end='')
它应该打印搜索到的值。
【讨论】:
如果值是数字,可以试试:
df[df['col1'] == 0]
如果值是字符串:
df[len(df['col1']) == 0]
【讨论】:
假设你的意思是你有一个从 1 到 73515 的列表,需要查找这个列表中是否缺少任何值。
一种方法是制作一个包含所有预期值的列表 例如 预期 = 范围(1,73515)
然后您可以将预期与您的列表进行比较
missing_values = []
for num in expected:
if num not in original_list:
missing_values.append(num)
或者在列表推导中做同样的事情:
missing_values_comprehension = [num for num in expected if num not in original_list]
显然,您确实提到过您拥有系列中的值。 如果需要,您可以直接遍历这些值,也可以先将它们转换为列表。
【讨论】:
您可以使用二分搜索算法将缺失值返回给您。请检查此解决方案并将其调整为使用熊猫: https://www.geeksforgeeks.org/find-missing-element-in-a-sorted-array-of-consecutive-numbers/
这是解决您的问题的最有效方法。它需要 O(logN) 来执行,与其他解决方案相比要快得多,在这种解决方案中,您必须遍历从 1 到系列中最后一个元素的所有值的范围,并检查每个值是否在系列中,这使用 O(N2) 因为迭代和 in 都需要 O(N)。
祝你有美好的一天!
【讨论】: