def summary(dat): 
    '''
    求一个df的列名、每列数据类型、每列非空行数、每列缺失比例、每列取值个数
    用于了解原始数据情况
    *依赖于
    singe_df()
    from pandas import concat
    '''
    dat_head = singe_df(dat.columns,'colname')
    dat_type = singe_df(dat.dtypes,'type') #如果一列中含有多个类型,则该列的类型会是object,同样字符串类型的列也会被当成object类型.
    dat_nrow = singe_df(len(dat)-dat.isnull().sum(axis = 0),'nrow')
    dat_lost = singe_df(dat.isnull().sum(axis = 0)/dat.shape[0],'lost_pct')
    dat_scope = []
    for i in range(len(dat.columns)):
        # print(dat.columns[i])
        x = dat[dat.columns[i]].value_counts().size
        # print(x)
        dat_scope.append(x)
        del x
    del i
    dat_scope = singe_df(dat_scope,'scope')
    summary=concat([dat_head, dat_type, dat_nrow, dat_lost, dat_scope], axis=1)
    del dat_head, dat_type, dat_nrow, dat_lost, dat_scope
    return summary