Pandas 将 so 值替换为 NaN

Pandas replace change so values to NaN

我有以下数据框:

# dictionary with list object in values
details = {
    'Name' : ['D', 'C', 'F', 'G','A','N'],
    'values' : ['21%','45%','10%',12,14,15],
}

df = pd.DataFrame(details)

列值的值以 % 为单位,但是,有些最初保存为带符号 % 的字符串,有些保存为数字。我想去掉 % 并将它们全部设为 int 类型。为此,我使用了替换,然后使用了 as_type。然而,当我重新填充 '%' 时,没有 % 的值变为 Nan 值:

df['values']=df['values'].str.replace('%', '')

df

>>> Name    values
0   D        21
1   C        45
2   F        10
3   G       NaN
4   A       NaN
5   N       NaN

我的要求的输出应该是:

>>> Name    values
0   D        21
1   C        45
2   F        10
3   G        12
4   A        14
5   N        15

我的问题是,如何在不获取这些 NaN 值的情况下去掉 % 并获取包含 values 的列?为什么会这样?

有数值,所以如果使用 str 函数获取数字的缺失值,可能的解决方案是使用 Series.replaceregex=True 替换为子字符串,然后因为获取数字与字符串将输出转换为整数:

df['values']=df['values'].replace('%', '', regex=True).astype(int)
print (df)
  Name  values
0    D      21
1    C      45
2    F      10
3    G      12
4    A      14
5    N      15

或者您使用替换缺失值的解决方案:

df['values']=df['values'].str.replace('%', '').fillna(df['values']).astype(int)