如何将pandas提取的Excel数据单列中的NaN值替换为0
解决方案
错误原因
你之前执行dfpm10 = df.fillna(0)时,调用fillna方法的对象是读入全表的df变量,所以返回的自然是完成空值替换的全量数据表,而非你需要的单列。
正确写法
直接对你提前单独提取的单列变量调用fillna方法即可,以PM10列为例:
dfpm10 = dfpm10.fillna(0)
如果所有污染物列都需要替换空值为0,依次操作即可:
dfpm10 = dfpm10.fillna(0) dfpm25 = dfpm25.fillna(0) dfozon = dfozon.fillna(0) dfno2 = dfno2.fillna(0) dfco = dfco.fillna(0) dfso2 = dfso2.fillna(0)
优化建议
你现有代码重复读取同一份Excel文件8次,会增加不必要的性能损耗,可改为一次性读入全表后再拆分列,同时完成空值替换,和你原有逻辑完全兼容:
import numpy as np import pandas as pd from IPython.display import display %matplotlib inline pd.options.display.max_rows = 13 pd.set_option('display.max_columns',750) file_name = 'C:\last_amb_hour_time.xls' # 仅读取一次全表 df = pd.read_excel(file_name, header=6, index_col=0) # 拆分单列同时替换空值为0,iloc后用[]包裹列索引可保持DataFrame格式,和原有返回结构一致 dfdate = df.iloc[:, [0]].fillna(0) dfpm10 = df.iloc[:, [2]].fillna(0) dfpm25 = df.iloc[:, [4]].fillna(0) dfozon = df.iloc[:, [6]].fillna(0) dfno2 = df.iloc[:, [8]].fillna(0) dfco = df.iloc[:, [10]].fillna(0) dfso2 = df.iloc[:, [12]].fillna(0)
内容的提问来源于stack exchange,提问作者Itinerator
相关产品推荐
相关产品推荐

