发布网友 发布时间:2024-10-01 23:58
共1个回答
热心网友 时间:2024-10-27 10:07
缺失值是由于某些原因导致部分数据为空。对于缺失值一般有2种处理方式,要么删除,要么填充(用某个值代替缺失值)。缺失值一般分2种,一种是某一列的数据缺失。另一种是整行数据都缺失,即一个空行。
本文所用到的Excel表格内容如下:
1.缺失值查看1.1 先打印一下数据结构看一下整体情形importpandasaspddf=pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')print(df)result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.0从结果来看,每一列均有缺失值。这里特别注意,时间日期类型的数据缺失值用NaT表示,其他类型的都用NaN来表示。千万不要笼统的认为缺失值都是用NaN来表示
1.2 info():查看缺失值的情形df=pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')print(df.info())result:
<class'pandas.core.frame.DataFrame'>RangeIndex:12entries,0to11Datacolumns(total5columns):#ColumnNon-NullCountDtype----------------------------0区域11non-nullobject1省份8non-nullobject2城市11non-nullobject3时间7non-nulldatetime64[ns]4指标9non-nullfloat64dtypes:datetime64[ns](1),float64(1),object(3)memoryusage:608.0+bytesNone从结果来看,省份这一列是9 non-null。说明省份这一列有4个null值。同理,时间这一列有4个缺失值,指标这一列有2个缺失值,城市这一列有1个缺失值,区域这一列有1个缺失值
2.缺失值的判断isnull():判断具体的某个值是否是缺失值,如果是则返回True,反之则为False
df=pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')print(df.isnull())result:
区域省份城市时间指标0FalseFalseFalseFalseFalse1FalseTrueFalseTrueFalse2FalseFalseFalseFalseTrue3FalseFalseFalseFalseFalse4FalseFalseFalseTrueFalse5FalseFalseFalseFalseFalse6TrueTrueTrueTrueTrue7FalseTrueFalseFalseFalse8FalseFalseFalseTrueFalse9FalseTrueFalseFalseTrue10FalseFalseFalseTrueFalse11FalseFalseFalseFalseFalse3.删除缺失值dropna():删除缺失值
3.1 严格删除所有所有有缺失值的行df=pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')print(df.dropna())result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.03华北北京北京2021-05-1345.05东北黑龙江哈尔滨2019-09-1142.011华中湖北荆州2019-09-1732.0从结果来看,dropna()方法默认会删除含有缺失值的行,只要这一行有一个字段缺失,就会被删除。所以最终只保留了4条完整的数据记录
3.2 只删除空白行df=pd.read_excel(r'C:\Users\admin\Desktop\data_test.xlsx')print(df.dropna(how='all'))result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.07华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.0how='all'代表只删除所有字段均为缺失值的行,即只删除空白行。所以保留了11条记录。只删除了第6行这个空白行。
4.缺失值补充一般有用0填充,用平均值填充,用众数填充(大多数时候用这个),向前填充(用缺失值的上一行对应字段的值填充,比如D3单元格缺失,那么就用D2单元格的值填充)、向后填充(与向前填充对应)等方式。
4.1填充所有缺失值fillna():缺失值,参数代表要填充的内容。
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.00result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.01从结果来看,该方法默认情形下会对所有缺失值进行填充
4.2 填充指定单列区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.02result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.034.3 填充多列4.3.1 指定多列填充一样的内容区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.04result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.054.3.2 指定多列填充不一样的内容区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.06result:
区域省份城市时间指标0东北辽宁大连2019-09-0612.01西北NaN西安NaT87.02华南广东深圳2019-09-08NaN3华北北京北京2021-05-1345.04华中湖北武汉NaT21.05东北黑龙江哈尔滨2019-09-1142.06NaNNaNNaNNaTNaN7华南NaN广州2019-09-1334.08华北河北石家庄NaT56.09华中NaN益阳2019-09-15NaN10东北辽宁鞍山NaT32.011华中湖北荆州2019-09-1732.07