我正在做一个项目,我将数据从SQL导入到pandas DataFrame中。这看起来很顺利,但是当我使用pandas.mean()时,它抛出了一个TypeError,说明一个串联的值列表不能转换为数值(见下文):
示例数据框:
df =
ProductSKU OverallHeight-ToptoBottom
0 AAI2185 74.5
1 AAI2275 47
2 AAI2686 56.5
3 AASA1002 73.23
字符串
函数调用:
avgValue = df["OverallHeight-ToptoBottom"].dropna().mean() <--- Breaks here
型
控制台输出:
Traceback (most recent call last):
File "C:\Program Files\Anaconda\lib\site-packages\pandas\core\generic.py", line 5310, in stat_func
numeric_only=numeric_only)
...
File "C:\Program Files\Anaconda\lib\site-packages\pandas\core\nanops.py", line 293, in nanmean
the_sum = _ensure_numeric(values.sum(axis, dtype=dtype_sum))
File "C:\Program Files\Anaconda\lib\site-packages\pandas\core\nanops.py", line 743, in _ensure_numeric
raise TypeError('Could not convert %s to numeric' % str(x))
TypeError: Could not convert 74.54756.573.23 to numeric
型
最奇怪的事情(也是我无法弄清楚的)是,当我通过CSV导入相同的数据时,它工作得非常好。只有当我通过SQL加载它时它才中断,会不会是我做错了什么?
3条答案
按热度按时间b1zrtrql1#
如果在groupby操作后出现类似的TypeError(例如
TypeError: Could not convert ace to numeric
),那么你可能有pandas>=2.0。groupby.mean()
的numeric_only=
参数在过去默认值为True,但从pandas 2.0开始,其默认值为False。这意味着当在groupby对象上调用mean
或std
之类的统计方法时,字符串列不会被删除(和过去一样)。要解决此问题,请传递numeric_only=True
。一个例子,说明了问题和解决方案。
字符串
5lwkijsr2#
正如控制台输出显示的那样,dataframe列
'OverallHeight-ToptoBottom'
存在问题。正如@Warren Weckesser评论的那样,我的猜测是这些列包含字符串。为了检查该列的数据类型,请运行
字符串
假设上述情况成立,将列数据类型转换为float应该可以解决问题。使用
pandas.to_numeric
型
fcg9iug33#
ToptoBottom的内容很有可能被读取为字符串。如果你用Python读取模式打开一个文件,并根据新的行和逗号拆分字符串,数字将转换为字符串,这就是为什么panda不能读取数据或将其用作平均值。因此,你会得到错误:
字符串
要消除转换问题,如果要将其转换为数值,可以使用pandas to_numeric()函数