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

Count String Values in a Numeric Column Pandas

我有一个数据框:

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

1st 如何计算我有非数字值的行数?

2 如何过滤以识别包含非数字值的行?

使用to_numeric with errors='coerce' for convert non numeric to NaNs and create mask by isna:

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

然后计算 Trues 个值 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)

一天结束时,我这样做是为了评估数字列中的字符串:

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

我想把它放在一个新的专栏中,这样我就可以过滤并为我提供更多的流畅性:

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

它returns:

    Name    Hours_Worked    Hr_String
2   Billy   T               NaN
3   Sarah   A               NaN

然后我做了

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

它returns:

2

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

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

它returns:

0.4

总的来说,这种方法对我有用,它帮助我了解哪些字符串值干扰了我的数字列,并允许我查看百分比,如果它真的很小,我可能会删除行以进行分析。如果百分比很大,我将不得不弄清楚我是否可以归因于它们或为它们找出其他东西。