修复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()
输出:

让我们看看这些列的数据类型。我们将使用dtypes
数据帧的Alcohol
属性来查找数据类型。
Alcohol.dtypes
现在我们将看到三个列是整数列,一个是浮点数列,然后两个列是对象,这意味着country
和continent
只是字符串。
输出:

假设我们想将spirit_servings
列转换为浮点数而不是整数。我们所要做的就是使用series方法astype()
并传递它float
,这意味着我们将其转换为浮点类型。
如果要修改数据框,您可以添加新列或覆盖现有的spirit_servings
列。如果我们定义dtypes
来检查列的数据类型,我们会看到它已经改变了,而spirit_servings
现在是一个浮点列。
Alcohol['spirit_servings']=Alcohol.spirit_servings.astype(float)
Alcohol.dtypes
输出:

现在你可能想知道这有什么用。当你有一个数据文件,其中数字存储为字符串,并将其读入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中转换Pandas系列的数据类型而不出错的例子
现在,我们将向您展示另一个数据集和另一个使用芯片订单数据的示例。
CHIP_ORDERS=pd.read_table('http://bit.ly/chiporders')
CHIP_ORDERS.head()
让我们看看专栏。我们要关注item_price
列。

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

要用它做一些数学运算,我们必须从一个序列中删除一个字符,比如$
符号。我们可以使用str
和replace()
方法来用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()
输出:
