【问题标题】:Pandas : finding out wrong data [duplicate]熊猫:找出错误的数据[重复]
【发布时间】:2018-04-08 13:16:40
【问题描述】:

假设有一个 pandas 数据框,如下所示: {a:[1,2,3,4], b:[1,2,3,?]} 假设字符串 'a' 和 'b' 中的值超过一千,我们还不知道有 '?'在系列b中。因此,当涉及到“b”时,我们一直使用“对象类型”

我们如何找出哪一行存在非浮点(非整数)值?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    假设您在同一列中有多行不是数字,

    df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['1','2','3','?', '?', 4]})
    

    您可以使用以下方法获取所有这些非数字的索引,

    pd.isnull(pd.to_numeric(df['b'], errors='coerce')).nonzero()[0]
    

    你得到

    array([3, 4])
    

    如果您需要像此 df 中那样在多个列上执行此操作,

    df = pd.DataFrame({'a':[1,'?',3,4,5,6], 'b':['1','2','3','?', '?', 4]})
    

    试试

    pd.isnull(df.apply(lambda x: pd.to_numeric(x, errors='coerce'))).any(1).nonzero()[0]
    

    然后你得到

    array([1, 3, 4])
    

    【讨论】:

      【解决方案2】:

      你可以使用这样的东西:

      import pandas as pd
      
      def make_float(v):
          try:
              return float(v)
          except:
              return pd.np.nan
      
      df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [1, 2, 3, '?']})
      
      df_float = df.applymap(make_float)
      # or just df_float = df.apply(pd.to_numeric, errors='coerce')
      

      在此之后,df_float 将是 float 类型,并且在出现无效条目的地方将具有 NaN 值。这会将有效的数字字符串(例如,'0.7')转换为浮点数;你必须决定这是否是一件好事。

      然后,您可以通过此代码(来自 https://stackoverflow.com/a/33641639/3830997)找到 NaN 值(以前是 df 中的不可转换条目)的位置:

      df_nan = df_float.unstack()
      df_nan = df_nan[df_nan.isnull()]
      df_nan
      # b  3    NaN
      

      【讨论】:

        【解决方案3】:

        您可以轻松地使用 pandas 实现这一目标:

        df.apply(pd.to_numeric,errors='coerce').isnull().any()
        Out[795]: 
        a    False
        b     True
        dtype: bool
        

        数据输入

        df = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [1, 2, 3, '?']})
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-21
          • 2021-08-07
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 2021-02-12
          • 1970-01-01
          • 2020-03-22
          相关资源
          最近更新 更多