用数值替换字符串

时间:2014-02-24 20:25:53

标签: python pandas

我正在阅读数据

df = pandas.read_csv("file.csv", names=['A','B','C','D','E','F','G', 'H','I','J', 'K'], header=None)

我得到了

df.dtypes
Out[54]: 
A     int64
B    object
C     int64
D     int64
E    object
F    object
G    object
H    object
I    object
J    object
K    object
dtype: object

问题是原始数据中的某些字段在小于6(但大于0)时已被字符串SUPP替换,因此我没有得到数值数据类型。我尝试用

替换它们
df.replace('SUPP', 3.0)

但我仍然没有获得数值数据类型。

一些典型的输入数据看起来像

931,Oxfordshire,9314125,123255,Larkmead School,Abingdon,125,124,20,SUPP,8
931,Oxfordshire,9314126,123256,John Mason School,Abingdon,164,164,25,6,16
931,Oxfordshire,9314127,123257,Fitzharrys School,Abingdon,150,149,9,0,11
931,Oxfordshire,9316076,123298,Our Lady's Abingdon,Abingdon,57,57,SUPP,SUPP,16

只需将上面的示例保存为file.csv即可重现该问题。

1 个答案:

答案 0 :(得分:2)

EdChum几乎在评论中都有这个。

In [18]: df.dtypes
Out[18]: 
0      int64
1     object
2      int64
3      int64
4     object
5     object
6      int64
7      int64
8     object
9     object
10     int64
dtype: object

In [19]: df.replace('SUPP', 3, inplace=True)

In [20]: df.dtypes
Out[20]: 
0      int64
1     object
2      int64
3      int64
4     object
5     object
6      int64
7      int64
8     object
9     object
10     int64
dtype: object

In [21]: df = df.convert_objects(convert_numeric=True)

In [22]: df.dtypes
Out[22]: 
0      int64
1     object
2      int64
3      int64
4     object
5     object
6      int64
7      int64
8      int64
9      int64
10     int64
dtype: object

您需要convert_objects,因为即使您已将SUPP替换为3,该列中的其他值仍为字符串(对象dtype)。