pandas 数据归一化以及行删除例程的方法
如下所示:
#coding:utf8
importpandasaspd
importnumpyasnp
frompandasimportSeries,DataFrame
#如果有id列,则需先删除id列再进行对应操作,最后再补上
#统计的时候不需要用到id列,删除的时候需要考虑
#deleterow
defrow_del(df,num_percent,label_len=0):
#printlist(df.count(axis=1))
col_num=len(list(list(df.values)[1]))-label_len#-1为考虑带标签
ifcol_num<0:
print'Error'
#printint(col_num*num_percent)
returndf.dropna(axis=0,how='any',thresh=int(col_num*num_percent))
#如果有字符串类型,则报错
#datanormalization-1to1
#label_col:不需考虑的类标,可以为字符串或字符串列表
#数值类型统一到float64
defdata_normalization(df,label_col=[]):
lab_len=len(label_col)
printlabel_col
iflab_len>0:
df_temp=df.drop(label_col,axis=1)
df_lab=df[label_col]
printdf_lab
else:
df_temp=df
max_val=list(df_temp.max(axis=0))
min_val=list(df_temp.min(axis=0))
mean_val=list((df_temp.max(axis=0)+df_temp.min(axis=0))/2)
nan_values=df_temp.isnull().values
row_num=len(list(df_temp.values))
col_num=len(list(df_temp.values)[1])
forrninrange(row_num):
#data_values_r=list(data_values[rn])
nan_values_r=list(nan_values[rn])
forcninrange(col_num):
ifnan_values_r[cn]==False:
df_temp.values[rn][cn]=2*(df_temp.values[rn][cn]-mean_val[cn])/(max_val[cn]-min_val[cn])
else:
print'Wrong'
forindex,labinenumerate(label_col):
df_temp.insert(index,lab,df_lab[lab])
returndf_temp
#创建一个带有缺失值的数据框:
df=pd.DataFrame(np.random.randn(5,3),index=list('abcde'),columns=['one','two','three'])
df.ix[1,:-1]=np.nan
df.ix[1:-1,2]=np.nan
df.ix[0,0]=int(1)
df.ix[2,2]='abc'
#查看一下数据内容:
print'\ndf1'
printdf
printrow_del(df,0.8)
print'-------------------------'
df=data_normalization(df,['two','three'])
printdf
printdf.dtypes
print(type(df.ix[2,2]))
以上这篇pandas数据归一化以及行删除例程的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。