Skip to main content
 首页 » 编程设计

python之使用 iloc 更改特定列的数据类型

2025年05月04日13haluo1

我想通过 iloc 更改我的 DataFrame 中某些列的数据类型。但是当我尝试这个时,dtype 没有改变(它仍然是对象):

import pandas as pd 
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class'] 
df = pd.read_csv('iris.csv', names=names, header=None) 
df = df[1:] 
 
In [11]: df.head() 
Out[11]: 
   sepal-length  sepal-width  petal-length  petal-width   class 
1           5.1          3.5           1.4          0.2  setosa 
2           4.9          3.0           1.4          0.2  setosa 
3           4.7          3.2           1.3          0.2  setosa 
4           4.6          3.1           1.5          0.2  setosa 
5           5.0          3.6           1.4          0.2  setosa 
 
 
In [12]: df.iloc[:,:-1] = df.iloc[:,:-1].astype(float) 
# No Error 
 
In [13]: df.dtypes  # still object dtype 
Out[13]: 
sepal-length    object 
sepal-width     object 
petal-length    object 
petal-width     object 
class           object 
dtype: object 

注意:不用iloc我也能做到,但是太长了:

df[['sepal-length', 'sepal-width', 'petal-length', 'petal-width']] = df[['sepal-length', 'sepal-width', 'petal-length', 'petal-width']].astype(float) 

请您参考如下方法:

您可以使用 infer_objects :

In [11]: df.infer_objects() 
Out[11]: 
   sepal-length  sepal-width  petal-length  petal-width   class 
1           5.1          3.5           1.4          0.2  setosa 
2           4.9          3.0           1.4          0.2  setosa 
3           4.7          3.2           1.3          0.2  setosa 
4           4.6          3.1           1.5          0.2  setosa 
5           5.0          3.6           1.4          0.2  setosa 
 
In [12]: df.infer_objects().dtypes 
Out[12]: 
sepal-length    float64 
sepal-width     float64 
petal-length    float64 
petal-width     float64 
class            object 
dtype: object 

问题是虽然右侧是正确的:

In [21]: df.iloc[:,:-1].astype(float).dtypes 
Out[21]: 
sepal-length    float64 
sepal-width     float64 
petal-length    float64 
petal-width     float64 
dtype: object 

分配 df.iloc[:,:-1] = 正在更新现有列并且不更改它们的 dtype。