检测数据帧panda的所有列中的值是否为数字,并将其擦除



我有一个类似的数据帧

col  col2
0   1     1
1   B     1
2   3     D
3   4     1
4   A     2
5   2     C
6   3     2

我想删除所有的字符,只保留所有列的值,如果它是一个字符,则指定-1。像这样的

col  col2
0    1     1
1   -1     1
2    3    -1
3    4     1
4   -1     2
5    2    -1
6    3     2

我如何使用python做到这一点,提前感谢

IIUC

df.apply(pd.to_numeric, errors='coerce').fillna(-1, downcast='infer') # comment by Pir
Out[480]: 
col  col2
0    1     1
1   -1     1
2    3    -1
3    4     1
4   -1     2
5    2    -1
6    3     2

或者类似的东西

df.mask(df.applymap(ord)>64,-1)
Out[479]: 
col col2
0   1    1
1  -1    1
2   3   -1
3   4    1
4  -1    2
5   2   -1
6   3    2

我们可以将dfstack(),然后将pd.to_numericerrors = 'coerce'一起使用,将无效数字设置为NaN,然后将fillna与-1一起使用,并将unstack((恢复为原始形状,最后在必要时使用astype(int)转换为int:

pd.to_numeric(df.stack(),errors='coerce').fillna(-1).unstack().astype(int)

col  col2
0    1     1
1   -1     1
2    3    -1
3    4     1
4   -1     2
5    2    -1
6    3     2

您可以使用df.replace函数将数据帧中与字符对应的值替换为-1

试试这个:

df = df.replace(r"[A-Za-z]", -1, regex=True)
print(df)

输出:

col1 col2
0   1   1
1  -1   1
2   3  -1
3   4   1
4  -1   2
5   2  -1
6   3   2

相关内容

最新更新