我正在开发一个项目,将数据从 SQL 导入到 pandas DataFrame 中。这似乎进行得很顺利,但是当我采取pandas.mean()
它抛出一个 TypeError ,指出串联的值列表无法转换为数字(见下文):
示例数据框:
ProductSKU OverallHeight
0 AAI2185 74.5
1 AAI2275 47
2 AAI2686 56.5
3 AASA1002 73.23
函数调用:
avgValue = df["OverallHeight"].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 加载它时它才会中断,是否有什么地方我做错了?
如果您在 groupby 操作后遇到类似的 TypeError (例如TypeError: Could not convert ace to numeric
),那么你的 pandas 可能>=2.0。
groupby.mean()
has numeric_only=
过去默认值为 True 的参数,但从 pandas 2.0 开始,其默认值为 False。这意味着当统计方法(例如)时,字符串列不会被删除mean
or std
在 groupby 对象上调用(就像过去所做的那样)。要解决该问题,请通过numeric_only=True
.
显示问题和解决方案的示例。
import pandas as pd
df = pd.DataFrame({
"Grouper": ["A", "B", "A", "B", "A"],
"Name": ["a", "b", "c", "d", "e"],
"Value": [0.95, 0.25, 0.25, 0.10, 1.00]
})
grouped = df.groupby("Grouper").mean() # <---- TypeError: Could not convert ace to numeric
grouped = df.groupby("Grouper").mean(numeric_only=True) # <---- OK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)