pandas 无法将缺少的“..”值的类型转换为浮点类型

eufgjt7s  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(119)

我需要将列中的所有值转换为float类型。但是,该列包含缺少的值,如下所示:


的数据
我使用以下代码将所有值转换为float类型。
第一个月
但收到一条错误消息,告诉我们:
TypeError:float()参数必须是字符串或数字,而不是“NoneType”
我会感谢任何推荐。

laawzig2

laawzig21#

好吧,你的数据实际上是None,为了跳过它们,只需检查它们是否为None。
我猜这能帮你完成任务

df['col'].apply(lambda x : float(x) if x is not None and x != '..' else np.nan)

字符串
或者你可以使用这个:

def convert(x):
    try:
        return float(x)
    except ValueError:
        return np.nan

df['col'].apply(convert)

m1m5dgzv

m1m5dgzv2#

编辑总结

这在您的输入图片中并不清楚(请以文本形式发布),但您的输入数据框架实际上包含了 None'.'

  • error “TypeError:float()参数必须是字符串或数字,而不是'NoneType'“ 表示存在'None'
  • error ValueError:无法将字符串转换为浮点数:'..' 现在表示存在一些实际的'..'字符串。
  • 忘记应用lambda:pandas.DataFrame.astype知道跳过NoneType而不会引发错误。先去掉像'..'这样的任意字符串。

改编答案:

一行,就地转换:

df['col'] = np.where(df['col']=='..', None, 
                                      df['col']).astype('float')

字符串

或者,分解步骤简化语法:(不需要numpy.where

(0)* 初始数据框架的模型:(请以文字形式代替图片)*

df = pd.DataFrame({'col' : ['-0.123',None, '..']})
df
      col
0  -0.123
1    None 
2    '..'


(1)首先,通过将值为“..”的单元格替换为 None 来管理数据:

df.loc[df['col']=='..'] = None
df
      col
0  -0.123
1    None
2    None


(2)然后应用数据类型转换:

df['col'] = df['col'].astype('float64')
df
      col
0  -0.123
1     NaN
2     NaN


缺少的数据被转换为“不是数字”。生成的数据类型符合要求:

df.dtypes
col    float64
dtype: object


更进一步:更多的pandas内置column-wise datatype converters可以用来代替你自己的lambda函数。

相关问题