【问题标题】:Find the missing value in pandas (not NaN) [closed]在 pandas 中查找缺失值(不是 NaN)[关闭]
【发布时间】:2020-10-10 14:06:45
【问题描述】:

我有一个按升序排序的熊猫系列。它的值类似于 1,2,3,...,73514,73515,73516。但是列数是 73515。

我需要找出缺失的值。怎么找?

【问题讨论】:

  • 提供有关您的数据的更多信息。字符串的值是数字吗?

标签: python pandas series missing-data


【解决方案1】:

假设列名是 int 类型,您也可以使用 python 集:

set(range(1,73516)).difference(set(df.columns))

set(range(1,73516)) - set(df.columns)

【讨论】:

    【解决方案2】:

    假设我理解正确:

    for i in range(1,73517):
        i if i not in series.to_list() else print('',end='')
    

    它应该打印搜索到的值。

    【讨论】:

      【解决方案3】:

      如果值是数字,可以试试:

      df[df['col1'] == 0]
      

      如果值是字符串:

      df[len(df['col1']) == 0]
      

      【讨论】:

        【解决方案4】:

        假设你的意思是你有一个从 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]
        

        显然,您确实提到过您拥有系列中的值。 如果需要,您可以直接遍历这些值,也可以先将它们转换为列表。

        【讨论】:

          【解决方案5】:

          您可以使用二分搜索算法将缺失值返回给您。请检查此解决方案并将其调整为使用熊猫: https://www.geeksforgeeks.org/find-missing-element-in-a-sorted-array-of-consecutive-numbers/

          这是解决您的问题的最有效方法。它需要 O(logN) 来执行,与其他解决方案相比要快得多,在这种解决方案中,您必须遍历从 1 到系列中最后一个元素的所有值的范围,并检查每个值是否在系列中,这使用 O(N2) 因为迭代和 in 都需要 O(N)。

          祝你有美好的一天!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-02
            • 2015-03-26
            • 2013-08-28
            相关资源
            最近更新 更多