我正在阅读数据
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即可重现该问题。
答案 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)。