pandas - 将列读取为float,转换无效条目

时间:2018-04-06 21:54:41

标签: python regex pandas

max_gust_speed = data[(data['Spd of Max Gust (km/h)'].astype(float) >= 50.0)]

此列中的大多数数据是整数或浮点数。但是,还有一些其他值(例如字符串'< 32')

是否有可能在这一行中处理这些边缘情况,或者我是否需要事先检查数据帧并转换它们?

我可以强行进入这条线吗?

2 个答案:

答案 0 :(得分:2)

使用@ sacul的样本数据(Thx)

您可以使用toDataURL删除非数字字符

replace

在这里,我们从'< 32'保留了32。这可能是也可能不是OP的意图。但这就是你如何做到的。

并且g = 'Spd of Max Gust (km/h)' n = pd.to_numeric(df[g].replace('[^\.\d-]', '', regex=True)) df[n >= 50] Spd of Max Gust (km/h) 0 75 1 80.2 看起来像

n

答案 1 :(得分:1)

这取决于您要对其执行的操作,但您可以将pd.to_numeric()errors = 'coerce'一起使用。例如:

df = pd.DataFrame({'Spd of Max Gust (km/h)':[75, 80.2, 12, '<32']})

  Spd of Max Gust (km/h)
0                     75
1                   80.2
2                     12
3                    <32

>>> pd.to_numeric(df['Spd of Max Gust (km/h)'], errors='coerce')
0    75.0
1    80.2
2    12.0
3     NaN

所以要应用你的过滤器:

df[(pd.to_numeric(df['Spd of Max Gust (km/h)'], errors='coerce').astype(float) >= 50.0)]

给你这个:

  Spd of Max Gust (km/h)
0                     75
1                   80.2