将数据框中的对象类型列转换为浮点型。

8 浏览
0 Comments

将数据框中的对象类型列转换为浮点型。

我想将数据框中所有非浮点类型的列转换为浮点型,是否有任何方法可以实现。如果我能够一次性完成将会很好。\n以下是类型:\n经度 - float64\n纬度 - float64\n住房中位数年龄 - float64\n总房间数 - float64\n总卧室数 - object\n人口 - float64\n家庭 - float64\n中位收入 - float64\n每个家庭的房间数 - float64\n类别_ <1H OCEAN - uint8\n类别_INLAND - uint8\n类别_ISLAND - uint8\n类别_NEAR BAY - uint8\n类别_NEAR OCEAN - uint8\n以下是我的代码片段:\n导入 pandas as pd\n导入 numpy as np\n从 sklearn.model_selection 中导入 KFold\ndf = pd.DataFrame(housing)\ndf[\'ocean_proximity\'] = pd.Categorical(df[\'ocean_proximity\']) #类型转换\ndfDummies = pd.get_dummies(df[\'ocean_proximity\'], prefix=\'category\')\ndf = pd.concat([df, dfDummies], axis=1)\nprint df.head()\nhousingdata = df\nhf = housingdata.drop([\'median_house_value\', \'ocean_proximity\'], axis=1)\nhl = housingdata[[\'median_house_value\']]\nhf.fillna(hf.mean, inplace=True)\nhl.fillna(hf.mean, inplace=True)

0
0 Comments

问题的出现原因:

该问题的出现可能是因为数据框中的某些列的数据类型被错误地设置为了对象类型(object),而不是浮点数类型(float),导致无法对这些列进行数值计算或其他需要浮点数类型的操作。

解决方法:

为了解决这个问题,可以使用pandas库中的to_numeric函数将数据框中的对象类型列转换为浮点数类型。具体的解决方法是创建一个新的数据框New_DataFrame,然后使用enumerate函数遍历原始数据框df的每一列。如果某一列的数据类型是对象类型,则使用to_numeric函数将该列转换为浮点数类型,并使用insert函数将转换后的列插入到新数据框New_DataFrame中。如果某一列的数据类型不是对象类型,则直接将该列插入到新数据框New_DataFrame中。最后,打印出新数据框New_DataFrame的前几行以进行验证。

代码如下所示:

import pandas as pd
New_DataFrame = pd.DataFrame()
x = {New_DataFrame.insert(i, name, pd.to_numeric(df[name], errors="coerce"), True) if (df[name].dtype.name == 'object') else New_DataFrame.insert(i, name, df[name], True) for i, name in enumerate(df.columns)}
print(New_DataFrame.head())

此外,如果需要将转换后的浮点数类型进一步优化为指定的浮点数类型,可以添加downcast参数,并设置为'float'或其他所需的浮点数类型。例如,可以将代码修改为:

New_DataFrame = pd.DataFrame()
x = {New_DataFrame.insert(i, name, pd.to_numeric(df[name], errors="coerce"), True) if (df[name].dtype.name == 'object') else New_DataFrame.insert(i, name, df[name], True) for i, name in enumerate(df.columns)}
New_DataFrame = New_DataFrame.astype(dtype='float')
print(New_DataFrame.head())

通过以上的解决方法,可以将数据框中的对象类型列成功转换为浮点数类型,从而解决了无法对这些列进行数值计算或其他需要浮点数类型的操作的问题。

0
0 Comments

问题的原因是数据框中有一些列的数据类型为对象(object),而我们希望将它们转换为浮点数(float)。文章提供了两种解决方法。

第一种方法是使用`df.astype(float)`,这种方法简单快捷,但没有对类型转换和错误处理提供具体的控制。

第二种方法是使用`pd.DataFrame.select_dtypes`选择需要转换的列,然后使用`pd.to_numeric`对这些列进行转换。这种方法提供了更多的控制,可以在可能的情况下进行类型转换,并指定错误处理方式。

文章中给出了一个示例,展示了如何使用这两种方法来将数据框中的对象类型列转换为浮点数类型列。首先,我们定义了一个数据框`df`,其中包含了三列数据,分别是`col1`、`col2`和`col3`,它们的数据类型分别为对象、浮点数和整数。然后,我们使用第二种方法将对象类型列转换为浮点数类型列,最后输出转换后的数据类型和数据框。

在文章的评论中,还有一些其他问题和解决方法被提到。例如,`pd.to_numeric`方法在某些情况下无法正常工作,可以使用`astype(float)`方法代替。此外,还有一个问题提到在使用`fillna`方法时,会将某一列的数据类型从浮点数转换为对象类型,解决方法是在`fillna`方法中使用`hf.mean()`而不是`hf.mean`。

总之,通过使用`astype(float)`或`pd.to_numeric`方法,我们可以将数据框中的对象类型列转换为浮点数类型列。这两种方法提供了不同程度的控制,可以根据具体需求选择适合的方法。

0