修复Python中的TypeError: Cannot Convert the Series to in Python

通过这个解释,我们将了解为什么会出现错误TypeError: cannot convert the series to <class 'float'>。我们还将学习如何修复它并在Python中更改Pandas系列的数据类型。

在Python中转换Pandas系列的数据类型而不会出错

让我们跳到一个示例数据集。我们将导入Pandas库,然后导入数据集;我们将从各国的酒精消费量开始。

我们将声明一个名为Alcohol的变量,并从http://bit.ly/drinksbycountry读取CSV文件。

执行以下代码后,我们将查看head(),我们应该看到六列和四行数字。

import pandas as pd
Alcohol = pd.read_csv('http://bit.ly/drinksbycountry')
Alcohol.head()

输出:

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

让我们看看这些列的数据类型。我们将使用dtypes数据帧的Alcohol属性来查找数据类型。

Alcohol.dtypes

现在我们将看到三个列是整数列,一个是浮点数列,然后两个列是对象,这意味着countrycontinent只是字符串。

输出:

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

假设我们想将spirit_servings列转换为浮点数而不是整数。我们所要做的就是使用series方法astype()并传递它float,这意味着我们将其转换为浮点类型。

如果要修改数据框,您可以添加新列或覆盖现有的spirit_servings列。如果我们定义dtypes来检查列的数据类型,我们会看到它已经改变了,而spirit_servings现在是一个浮点列。

Alcohol['spirit_servings']=Alcohol.spirit_servings.astype(float)
Alcohol.dtypes

输出:

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

现在你可能想知道这有什么用。当你有一个数据文件,其中数字存储为字符串,并将其读入Pandas字符串,但想要对它们进行数学运算时,你通常会这样做。

要对列进行数学运算,它必须是数值类型,因此您的列类型应该是float,这是更常见的用例。如果你不把它转换成float类型,你会得到一个错误,就像这样TypeError: cannot convert the series to <class 'float'>

还有一个问题:在实际阅读CSV文件之前,它是如何找到每一列的类型的?现在我们将在CSV阅读过程中更改数据类型;我们必须再添加一个参数dtype

我们把它传给字典;字典键是spirit_servings,字典值是浮点数。现在,如果我们检查该列的数据类型,我们会再次看到spirit_servings已被转换为浮点数。

Alcohol = pd.read_csv('http://bit.ly/drinksbycountry',dtype={'spirit_servings':'float'})
Alcohol.dtypes

输出:

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

这和上面的唯一区别是这个方法在阅读过程中执行。在上面的例子中,我们是在数据框已经创建之后对其进行转换的。

另一个在Python中转换Pandas系列的数据类型而不出错的例子

现在,我们将向您展示另一个数据集和另一个使用芯片订单数据的示例。

CHIP_ORDERS=pd.read_table('http://bit.ly/chiporders')
CHIP_ORDERS.head()

让我们看看专栏。我们要关注item_price列。

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

CHIP_ORDERS.dtypes

Pandas将item_price列存储为对象,即字符串,因为它不知道这些是数字。

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python

 

要用它做一些数学运算,我们必须从一个序列中删除一个字符,比如$符号。我们可以使用strreplace()方法来用nothing替换美元符号,但这还不够;如果我们试图对这个序列进行数学运算,它会给予你一个错误。

CHIP_ORDERS.item_price.str.replace('$','').mean()

输出:

ValueError: could not convert string to float: '2.39 3.39 3.39...

这是因为即使我们删除了美元符号,它仍然是一个字符串,所以我们必须将其类型转换为float。在我们将其类型转换为float之后,我们可以对它进行数学运算。

CHIP_ORDERS.item_price.str.replace('$','').astype(float).mean()

输出:

 

修复Python中的TypeError: Cannot Convert the Series to <Class 'Float'> in Python