对于两端缺失数据使用前后填充,对于中间数据使用线性插值(可替换)
import numpy as np
import pandas as pd
from scipy. interpolate import interp1d
df = pd. read_excel( 'data.xlsx' )
df[ '城市' ] . fillna( method = 'ffill' , inplace = True )
df. drop( 'city' , 1 , inplace= True )
df[ df[ '城市' ] == '晋中市' ]
城市 year pm2.5(达尔豪斯) lnpm2.5(达尔豪斯) 第二产业增加值占GDP比重(%) 人均地区生产总值(元) 地区生产总值(万元) 年末人口总数(万人) 行政区域土地面积(全市) 能源效率 地方财政一般预算内支出 科学支出 年末实有城市道路面积(万平方米) 行政区域土地面积(市辖区) 210 晋中市 2004 30.117360 3.405102 50.40 8300.0 2539148.0 306.12 16404.0 8.337756 305000 350 370 1327.0 211 晋中市 2005 38.581012 3.652760 40.46 10772.0 3310171.0 306.63 16404.0 8.876620 394496 532 388 1311.0 212 晋中市 2006 45.324575 3.813849 42.31 12491.0 3856794.0 310.00 16404.0 9.215031 664054 497 421 1311.0 213 晋中市 2007 36.578386 3.599458 41.94 15157.0 4701976.0 313.88 16404.0 7.989844 721064 5866 521 1311.0 214 晋中市 2008 34.374482 3.537314 38.71 18219.0 5678066.0 317.90 16404.0 6.547999 856795 7569 585 1311.0 215 晋中市 2009 38.059734 3.639157 33.44 20335.0 6368106.0 320.00 16404.0 7.236680 1030873 8495 592 1311.0 216 晋中市 2010 49.963807 3.911299 36.46 24275.0 7638366.0 320.96 16392.0 7.221849 1205394 10119 616 1318.0 217 晋中市 2011 77.109822 4.345231 40.19 27300.0 8902376.0 323.30 16392.0 8.464127 1541989 11939 616 1318.0 218 晋中市 2012 57.939010 4.059391 40.64 30093.0 9865596.0 325.00 16392.0 7.195288 1787371 14058 769 1318.0 219 晋中市 2013 54.531928 3.998786 39.69 30977.0 10222281.0 330.50 16392.0 6.761532 2136333 17287 1010 1318.0 220 晋中市 2014 45.484201 3.817365 39.69 31434.0 10413000.0 330.50 16392.0 6.761532 2168543 19176 850 1318.0 221 晋中市 2015 42.342921 3.745801 31.39 31434.0 10461155.0 329.66 16392.0 NaN 2411647 19036 965 1318.0 222 晋中市 2016 35.998973 3.583490 30.09 32646.0 10911041.0 332.00 16444.0 NaN 2471699 15134 1095 1311.0 223 晋中市 2017 35.170259 3.560201 31.95 38274.0 12849233.0 332.00 16392.0 7.340062 2789231 24569 0 1318.0 224 晋中市 2018 34.452057 3.539569 32.14 42910.0 14476039.0 334.00 16444.0 7.550800 3226368 22871 1451 1311.0
df. isna( ) . sum ( )
城市 0
year 0
pm2.5(达尔豪斯) 0
lnpm2.5(达尔豪斯) 15
第二产业增加值占GDP比重(%) 12
人均地区生产总值(元) 59
地区生产总值(万元) 34
年末人口总数(万人) 0
行政区域土地面积(全市) 0
能源效率 106
地方财政一般预算内支出 0
科学支出 0
年末实有城市道路面积(万平方米) 0
行政区域土地面积(市辖区) 0
dtype: int64
def chazhi_ ( data, col, method = 'linear' , thresdhold = 0.9 ) :
'''
创建缺失值补全函数,针对每一个分组
data:传入的每一个分组
method:使用插值的方法,
thresdhold:插值的门槛,即缺失值占总数据的比重,如果超过门槛者不进行补充
'''
chazhi_index = data[ col] [ data[ col] . isna( ) ] . index
if len ( chazhi_index) / data. shape[ 0 ] >= 0.9 :
return data
else :
y = data[ col] [ ~ ( data[ col] . isna( ) ) ] . values
x = data[ col] [ ~ ( data[ col] . isna( ) ) ] . index
f = interp1d( x, y, kind = method)
chazhi_index_2 = [ c for c in chazhi_index if c< x. max ( ) and c> x. min ( ) ]
data. loc[ chazhi_index_2, col] = f( chazhi_index_2)
fill = data[ col] . fillna( method = 'ffill' )
bill = data[ col] . fillna( method = 'bfill' )
w = pd. DataFrame( ( fill, bill) ) . mean( )
data. iloc[ : , 0 ] = w
return data
def chazhi ( data, group_id) :
'''
针对整个dataframe,
data:dataframe文件
group_id:样本的id
'''
na_col = data. columns[ data. isna( ) . sum ( ) != 0 ]
for col in na_col[ 1 : ] :
test = data[ [ col, group_id] ]
data[ col] = test. groupby( group_id) . apply ( chazhi_, col= col, method = 'linear' ) [ col]
return data[ data. isna( ) . sum ( 1 ) == 0 ]
w = chazhi( df, '城市' )
w. isna( ) . sum ( )
城市 0
year 0
pm2.5(达尔豪斯) 0
lnpm2.5(达尔豪斯) 0
第二产业增加值占GDP比重(%) 0
人均地区生产总值(元) 0
地区生产总值(万元) 0
年末人口总数(万人) 0
行政区域土地面积(全市) 0
能源效率 0
地方财政一般预算内支出 0
科学支出 0
年末实有城市道路面积(万平方米) 0
行政区域土地面积(市辖区) 0
dtype: int64
w[ w[ '城市' ] == '晋中市' ]
城市 year pm2.5(达尔豪斯) lnpm2.5(达尔豪斯) 第二产业增加值占GDP比重(%) 人均地区生产总值(元) 地区生产总值(万元) 年末人口总数(万人) 行政区域土地面积(全市) 能源效率 地方财政一般预算内支出 科学支出 年末实有城市道路面积(万平方米) 行政区域土地面积(市辖区) 210 晋中市 2004 30.117360 3.405102 50.40 8300.0 2539148.0 306.12 16404.0 8.337756 305000 350 370 1327.0 211 晋中市 2005 38.581012 3.652760 40.46 10772.0 3310171.0 306.63 16404.0 8.876620 394496 532 388 1311.0 212 晋中市 2006 45.324575 3.813849 42.31 12491.0 3856794.0 310.00 16404.0 9.215031 664054 497 421 1311.0 213 晋中市 2007 36.578386 3.599458 41.94 15157.0 4701976.0 313.88 16404.0 7.989844 721064 5866 521 1311.0 214 晋中市 2008 34.374482 3.537314 38.71 18219.0 5678066.0 317.90 16404.0 6.547999 856795 7569 585 1311.0 215 晋中市 2009 38.059734 3.639157 33.44 20335.0 6368106.0 320.00 16404.0 7.236680 1030873 8495 592 1311.0 216 晋中市 2010 49.963807 3.911299 36.46 24275.0 7638366.0 320.96 16392.0 7.221849 1205394 10119 616 1318.0 217 晋中市 2011 77.109822 4.345231 40.19 27300.0 8902376.0 323.30 16392.0 8.464127 1541989 11939 616 1318.0 218 晋中市 2012 57.939010 4.059391 40.64 30093.0 9865596.0 325.00 16392.0 7.195288 1787371 14058 769 1318.0 219 晋中市 2013 54.531928 3.998786 39.69 30977.0 10222281.0 330.50 16392.0 6.761532 2136333 17287 1010 1318.0 220 晋中市 2014 45.484201 3.817365 39.69 31434.0 10413000.0 330.50 16392.0 6.761532 2168543 19176 850 1318.0 221 晋中市 2015 42.342921 3.745801 31.39 31434.0 10461155.0 329.66 16392.0 6.954375 2411647 19036 965 1318.0 222 晋中市 2016 35.998973 3.583490 30.09 32646.0 10911041.0 332.00 16444.0 7.147218 2471699 15134 1095 1311.0 223 晋中市 2017 35.170259 3.560201 31.95 38274.0 12849233.0 332.00 16392.0 7.340062 2789231 24569 0 1318.0 224 晋中市 2018 34.452057 3.539569 32.14 42910.0 14476039.0 334.00 16444.0 7.550800 3226368 22871 1451 1311.0