如何计算含字符串'NA'的Pandas DataFrame列均值并忽略该值
解决Pandas中含字符串'NA'列的均值计算问题
问题原因
你的A、B列因为混杂了字符串类型的'NA',导致列的 dtype 是object,使用numeric_only=True时会被判定为非数值列,所以无法计算它们的均值。需要先把这些字符串'NA'转换为Pandas可识别的缺失值NaN,再将列转为数值类型,才能正常计算均值。
具体解决方案
步骤1:转换字符串'NA'为NaN并转为数值类型
使用pd.to_numeric()函数,通过errors='coerce'参数将无法转换为数值的内容(比如'NA')强制转为NaN,同时把列转为数值 dtype。
步骤2:计算均值
Pandas的mean()方法会自动忽略NaN值,直接计算有效数值的均值。
完整代码示例
import pandas as pd # 原始DataFrame fruit = pd.DataFrame({ 'id': (1,2,3,4,5,6), 'Name': ('apple','apple','melon','melon','orange','orange'), 'A': (1,2,'NA',20,5,5), 'B': (1,5,4,2,'NA',1), 'C': (1,5,4,2,3,1) }) # 批量处理A、B列,转换'NA'为NaN并转为数值类型 fruit[['A', 'B']] = fruit[['A', 'B']].apply(pd.to_numeric, errors='coerce') # 计算A、B列的均值 a_mean = fruit['A'].mean() b_mean = fruit['B'].mean() print(f"A列均值:{a_mean:.1f}") # 输出6.6 print(f"B列均值:{b_mean:.1f}") # 输出2.6
验证结果
- A列有效数值:
[1,2,20,5,5],均值为(1+2+20+5+5)/5 = 6.6 - B列有效数值:
[1,5,4,2,1],均值为(1+5+4+2+1)/5 = 2.6
内容的提问来源于stack exchange,提问作者mojop
相关产品推荐
相关产品推荐

