【发布时间】:2013-11-20 18:09:11
【问题描述】:
我有一个带有“cap”列的 pandas 数据框。此列主要由浮点数组成,但其中包含一些字符串,例如在索引 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' 保留为字符串?
【问题讨论】:
-
我认为这可能会损害性能。列中的混合类型会强制您使用
dtype=object,而您可能会与dtype=float相处融洽。有一个特殊的“非数字”浮点值 (numpy.nan) 可以很好地指示丢失的数据。还有Pandas understands it very well. -
你只需要在
read_csv中指定na_values=['na']就可以了,见here -
或者您可以使用
df.convert_objects(convert_numeric='force')将非数字强制为nan(在cython 中实现,因此速度非常快) -
你考虑接受这个answer。