+: 'int' 和 'str' 使用 Pandas 平均值不支持的操作数类型



当我尝试获取数据框列之一的平均值时,它显示了错误:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

这是我拥有的代码:

import pandas as pd
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data"
df = pd.read_csv(url, header = None, )
headers = ["symboling","normalized-losses","make","fuel-type","aspiration","num-of-doors","body-style","drive-wheels","engine-location","wheel-base","lenght","width","height","curb-weight","engine-type","num-of-cylinders","engine-size","fuel-system","bore","stroke","compression-ratio","horsepower","peak-rpm","city-mpg","highway-mpg","price"]
df.columns = headers
df.replace('?',np.nan, inplace=True)
mean_val = df['normalized-losses'].mean()
print(mean_val)

您需要使用pd.to_numeric()将列数据类型转换为数字。如果使用该选项errors='coerce',则它将用NaN自动替换非数字字符。

mean_val = pd.to_numeric(df['normalized-losses'], errors='coerce').mean()
print(mean_val)
> 122.0

添加到Nathaniel的答案中,您有floatstr的混合物。如果您

,您可以看到这个
print(df['normalized-losses'].apply(type))

将返回

0      <class 'float'>
1      <class 'float'>
2      <class 'float'>
3        <class 'str'>
4        <class 'str'>

正如您的错误消息所说,您需要制作float类型的所有数据。您可以按照纳撒尼尔建议使用pd.to_numeric,也可以使用

使用
df['normalized-losses'] = df['normalized-losses'].astype('float')
mean_val = df['normalized-losses'].mean()
print(mean_val)

输出

122.0

如果您仅对标准化损坏列感兴趣,并且知道所有字符串都可以正确转换(在这种情况下,我相信它们可以是因为它们都是数字的字符串,例如'130'),则可以只是这样做。如果您要使用其余数据并希望将所有数字字符串转换为转换,请使用Nathaniel的实现。

相关内容

最新更新