python:在存在字符串的情况下将pandas数据框中的数字数据转换为浮点数

发布于 2021-01-29 16:49:51

我有一个带有“ cap”列的熊猫数据框。该列主要由浮点数组成,但其中包含一些字符串,例如索引2。

df =
    cap
0    5.2
1    na
2    2.2
3    7.6
4    7.5
5    3.0
...

我从csv文件中导入数据,如下所示:

df = DataFrame(pd.read_csv(myfile.file))

不幸的是,当我这样做时,“ cap”列完全作为字符串导入。我希望将浮点数识别为浮点数,并将字符串识别为字符串。尝试使用以下方法进行转换:

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

引发错误:

could not convert string to float: na

有什么办法可以将所有数字都设为浮点数,但将’na’保留为字符串?

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一个可能的解决方法

    首先,您定义一个仅在需要时将数字转换为浮点数的函数

     def to_number(s):
        try:
            s1 = float(s)
            return s1
        except ValueError:
            return s
    

    然后您逐行应用它。


    例:

    给定

     df 
         0
      0  a
      1  2
    

    其中a2是字符串,我们通过以下方式进行转换

    converted = df.apply(lambda f : to_number(f[0]) , axis = 1)
    
     converted
     0    a
     1    2
    

    直接检查类型:

    type(converted.iloc[0])                                                                                                                             
    str
    
    type(converted.iloc[1])                                                                                                                             
    float
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看