python:在存在字符串的情况下将pandas数据框中的数字数据转换为浮点数
我有一个带有“ 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’保留为字符串?
-
这是一个可能的解决方法
首先,您定义一个仅在需要时将数字转换为浮点数的函数
def to_number(s): try: s1 = float(s) return s1 except ValueError: return s
然后您逐行应用它。
例:
给定
df 0 0 a 1 2
其中
a
和2
是字符串,我们通过以下方式进行转换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