gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:39 28 4
gpt4 key购买 nike

我想通过 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。

关于python - 使用 iloc 更改特定列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52395179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com