CSV读取的DataFrame:字符串转浮点数及NaN均值填充方案咨询
解决字符串浮点数列的NaN填充问题
我来给你捋捋这个问题的解决思路哈,你遇到的核心卡点就是列的类型不对——字符串类型没法直接计算均值,硬转float还会把NaN变成0,完全不符合需求。咱们分两步走就能搞定:
第一步:把字符串列转成数值类型(统一处理NaN)
首先得把那些字符串格式的浮点数转换成pandas能识别的数值类型,同时把所有无效值(不管是原来的NaN,还是写成"NaN"的字符串)都统一变成pandas标准的NaN。用pd.to_numeric()就行,记得加errors='coerce'参数,它会自动把转不动的内容变成NaN:
import pandas as pd # 假设你的DataFrame叫df,目标列是'target_col' df['target_col'] = pd.to_numeric(df['target_col'], errors='coerce')
第二步:用均值填充NaN
现在列已经是数值类型了,计算均值和填充就顺理成章了。先算列的均值(默认会忽略NaN),再用fillna()把NaN替换掉:
# 计算列的均值 col_avg = df['target_col'].mean() # 填充NaN df['target_col'] = df['target_col'].fillna(col_avg)
嫌麻烦的话,也可以把两步合并成一行代码:
df['target_col'] = pd.to_numeric(df['target_col'], errors='coerce').fillna(df['target_col'].mean())
举个实际例子验证
假设你的原始数据长这样:
| target_col |
|---|
| "2.5" |
| "4.7" |
| NaN |
| "6.1" |
| "NaN" |
跑完代码后,target_col就变成了:
| target_col |
|---|
| 2.5 |
| 4.7 |
| 4.433... |
| 6.1 |
| 4.433... |
这样既把字符串转成了浮点数,又用均值填充了所有NaN,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Brojek Polonsky
相关产品推荐
相关产品推荐

