我有一个类似的数据帧
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_numeric
与errors = '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