【问题标题】:Changing DataFrame data type to a float, but some data can't be converted将 DataFrame 数据类型更改为浮点数,但某些数据无法转换
【发布时间】:2021-09-20 07:58:34
【问题描述】:

我有一个字符串数据类型的熊猫数据框。大多数数据可以转换为整数或浮点数。但是,有些行无法转换。

数据框如下图:

A
2
3
1
-

请注意,虽然它是一个数字,但它仍然是字符串格式。所以,我应用这个代码:

df['A'] = df['A'].astype(float)

但是,到第四行时,就会出现这个错误:

ValueError: could not convert string to float: '-'

我只想跳过无法转换的行的转换,例如表格上的第四行。我该如何解决这个问题?

【问题讨论】:

    标签: python pandas type-conversion


    【解决方案1】:

    如果没有缺失值,请使用to_numericerrors='coerce' 将非数值转换为NaN,然后通过DataFrame.dropna 删除缺失值的行:

    df['A'] = pd.to_numeric(df['A'], errors='coerce')
    
    df = df.dropna(subset=['A'])
    

    如果可能,| 的缺失值链掩码按位 OR - 转换后的非缺失值 OR 缺失值在转换之前boolean indexing

    orig = df['A'].isna()
    df['A'] = pd.to_numeric(df['A'], errors='coerce')
    
    df = df[df['A'].notna() | orig]
    

    【讨论】:

    • 效果很好,谢谢。只是好奇,那个“胁迫”有什么作用? df[df['A'].notna() | orig] 是做什么的?
    • @el-cheapo - 添加到答案中。
    【解决方案2】:

    或者只是用astype做正则表达式:

    >>> df.loc[df['A'].str.contains('[\d|\.]')].astype(float)
         A
    0  2.0
    1  3.0
    2  1.0
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2011-03-10
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多