如何删除DataFrame中的#NaN行以计算均值与求和?
解决办法
首先,你遇到的问题核心有两个:一是drop(index=[0])没生效,二是用statistics.mean处理带NaN的pandas Series会报错。
1. 修复drop不生效的问题
pandas.DataFrame.drop()默认返回新的DataFrame,不会直接修改原数据。如果没把结果重新赋值,原Read_FDX根本没变化。正确写法:
Read_FDX = Read_FDX.drop(index=[0]) # 将删除后的结果重新赋值给原变量
2. 更高效的处理:不用删行,直接忽略NaN计算统计量
其实完全没必要删除第一行,pandas自带的统计方法会自动忽略NaN值,比statistics模块更适配pandas数据结构:
# 直接用pandas的mean方法计算均值 returns_mean = Read_FDX['%Returns'].mean() # 求和同理 returns_sum = Read_FDX['%Returns'].sum()
3. 可选:彻底移除含NaN的行(若需干净数据集)
如果后续操作需要完全无NaN的数据集,可以用dropna()精准删除目标列的NaN行:
# 仅删除'%Returns'列包含NaN的行 Read_FDX_clean = Read_FDX.dropna(subset=['%Returns']) # 此时用statistics模块也能正常计算 statistics.mean(Read_FDX_clean['%Returns'])
补充说明
pct_change()生成第一行NaN是正常现象——第一个数据没有前值可计算变化率。优先用pandas内置统计方法是最省心的方案,无需手动处理NaN。
内容的提问来源于stack exchange,提问作者Seyed Hossein Fatemi
相关产品推荐
相关产品推荐

