抱歉,我看到了很多与此错误相关的问题,但即使有了所有这些信息,我也无法解决它。
我有一个数据框
df
,其中有一列名为 int_rate
。该列的类型为 O
。它保留百分比,所以每一行就像: 10.95 %
我需要删除 %
符号来转换然后 int
中的列。我尝试过以下代码:
df['int_rate']=df['int_rate'].apply(lambda x: x[:-1])
我收到以下错误:
TypeError:“float”对象不可下标。
我不明白的第一件事是,如果我的列类型不是浮动的,为什么要浮动对象,如果是这样,我怎样才能摆脱
%
符号?
您有“对象”列,因此它可以是各种类型的混合。 首先转换为字符串,然后删除最后一个字符(您也可以按照 shivam 的建议替换百分比)
df['int_rate'] = df['int_rate'].apply(lambda x: str(x)[:-1] if str(x).endswith('%') else x)
您的数据可能包含一些
NaN
值,因为 NaN
在 Pandas 中被视为 float
类型。
您可以执行
df.info()
并查看 Non-Null Count
以检查 int_rate
列的计数是否对应于任何 NaN
值的存在。
如果存在任何
NaN
值,您可以通过仅将代码应用于那些非 NaN
条目来绕过错误,如下所示:
df['int_rate'] = df.loc[df['int_rate'].notna(), 'int_rate'].apply(lambda x: x[:-1])
在这里,我们进行过滤以仅处理具有布尔掩码的那些行:
df['int_rate'].notna()
以排除那些NaN
条目。
据推测,并非所有行都是“nnn.mm %”形式,有些是浮点数...你能尝试一下吗?
df['int_rate']=df['int_rate'].apply(lambda x: x if isinstance(x, float) else float(x[:-1]))