为何计算字符串类型整数的Series均值时得到错误浮点数?
为啥字符串类型的Series算均值会出问题?
先看你遇到的场景对应的代码:
import pandas as pd # 存字符串数字的Series s_str = pd.Series(["1", "2"]) print(s_str.mean()) # 你得到了6.0,不是预期的1.5 # 存普通数字的Series s_num = pd.Series([1, 2]) print(s_num.mean()) # 正常输出1.5
问题根源很直接:
- 当Series里是正经的整数/浮点数时,
mean()就是按算术平均逻辑计算,结果符合预期。 - 但如果是字符串类型的数字,pandas根本不会把它们当成数字处理!
- 对于常规的object类型字符串,pandas会调用numpy的计算逻辑,去算每个字符串字符的Unicode码点平均值。比如"1"的码点是49,"2"是50,平均应该是49.5;你得到6.0,大概率是实际数据里的字符串对应的码点平均为6(比如不小心用了特殊字符,或是输入错了元素值)。
- 要是用了pandas专门的StringDtype(
dtype="string"),调用mean()会直接报错,因为字符串类型本身不支持算术均值计算。
要得到正确的均值,得先把字符串转成数值类型:
# 直接转成int类型 s_str.astype(int).mean() # 这下就能得到1.5了 # 更稳妥的方法,能处理无法转换的异常值 pd.to_numeric(s_str, errors="coerce").mean()
内容的提问来源于stack exchange,提问作者alvin
相关产品推荐
相关产品推荐

