代码之家  ›  专栏  ›  技术社区  ›  David 54321

计算数字列pandas中的字符串值

  •  1
  • David 54321  · 技术社区  · 7 年前

    我有一个数据框:

        Name    Hours_Worked
    1   James   3
    2   Sam     2.5
    3   Billy   T
    4   Sarah   A
    5   Felix   5
    

    1如何计算具有非数值的行数?

    第二,如何过滤以标识包含非数值的行?

    2 回复  |  直到 7 年前
        1
  •  3
  •   jezrael    7 年前

    使用 to_numeric 具有 errors='coerce' 用于将非数字转换为 NaN 创建掩码 isna :

    mask = pd.to_numeric(df['Hours_Worked'], errors='coerce').isna()
    #oldier pandas versions
    #mask = pd.to_numeric(df['Hours_Worked'], errors='coerce').isnull()    
    

    然后数数 True S值依据 sum 以下内容:

    a = mask.sum()
    print (a)
    2
    

    然后过滤 boolean indexing 以下内容:

    df1 = df[mask]
    print (df1)
        Name Hours_Worked
    3  Billy            T
    4  Sarah            A
    

    详情 以下内容:

    print (mask)
    1    False
    2    False
    3     True
    4     True
    5    False
    Name: Hours_Worked, dtype: bool
    

    另一种检查数字的方法:

    def check_num(x):
        try:
            float(x)
            return False        
        except ValueError:
            return True
    
    mask = df['Hours_Worked'].apply(check_num)
    
        2
  •  0
  •   David 54321    6 年前

    在一天结束时,我对数值列中的求值字符串进行了这样的操作:

    df['Hr_String'] = pd.to_numeric(df['Hours_Worked'], errors='coerce')
    

    我想把它放在一个新的柱子里,这样我就可以过滤,再给我加点液体:

    df[df['Hr_String'].isnull()]
    

    它返回:

        Name    Hours_Worked    Hr_String
    2   Billy   T               NaN
    3   Sarah   A               NaN
    

    我就这么做了

    df['Hr_String'].isnull().sum()
    

    它返回:

    2个

    然后我想要占总行数的百分比,所以我这样做了:

    teststr['Hr_String'].isnull().sum() / teststr.shape[0]
    

    它返回:

    0.4分

    总的来说,这种方法对我很有用,它帮助我理解字符串值在我的数值列中造成的混乱,并允许我查看百分比,如果它真的很小,我可以删除行进行分析。如果这个百分比很大,我就得弄清楚我能不能算出来,或者为他们想出别的办法。