我有一个带有杂乱值列的熊猫数据框,我想对其进行清理。我的数据框如下所示:
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 语句中,但可能有更优雅的处理方式?
答案 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