2

我有一个这样的数据框

   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做到这一点,提前谢谢你

4

3 回答 3

6

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
于 2020-03-25T15:09:39.003 回答
3

我们可以stack()使用 df ,然后使用pd.to_numericwitherrors = 'coerce'将无效数字设置为NaN,然后fillna使用 -1 ,并将 unstack() 恢复为原始形状,最后astype(int)在必要时使用 to 转换为 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
于 2020-03-25T15:09:17.743 回答
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
于 2020-03-25T15:16:07.927 回答