为什么我的函数不能处理 NaN 值并抛出“float' object is not subscriptable”?

时间:2021-07-04 15:46:36

标签: python pandas type-conversion

我有一个带有杂乱值列的熊猫数据框,我想对其进行清理。我的数据框如下所示:

d = {"Name": ["A", "B", "C"], "Value": ["2.45k", np.nan, "1.23"]}
df = pd.DataFrame(data=d)

    Name  Value
  0    A  2.45k
  1    B    NaN
  2    C   1.23

通过 type(df.iloc[1,1]) 探索 NaN 行告诉我 NaN 的类型为 float 并且使用 float(df.iloc[1,1]) 保持/返回 nan 而不会抛出任何错误。

所以我写了一个函数来清理列。它检查是否有某种后缀,如果没有,则返回给定值作为类型 float:

def to_float(x):
    if x[-1] == "k":
        return float(x.rstrip("k")) * 1000
    else:
        return float(x)

但是在调用时:

B = to_float(df.iloc[1,1])

我正在检索类型错误:'float' object is not subscriptable,我不明白,因为 float(df.iloc[1,1]) 基本上有效。

我需要将值分配给一个属性,因此不能选择跳过 NaN 行。

我发现我可以将整个函数包装在 try/except 语句中,但可能有更优雅的处理方式?

2 个答案:

答案 0 :(得分:2)

类似的东西

from numpy import nan
df['new'] = pd.eval(df.Value.str.replace('k','*1000'))
df
  Name  Value      new
0    A  2.45k  2450.00
1    B    NaN      NaN
2    C   1.23     1.23

答案 1 :(得分:0)

根据亨利对我的问题的评论,我包含了一个类型检查:

char