Pandas处理表格

来源:互联网 发布:资源数据库建设 编辑:程序博客网 时间:2024/05/02 00:08
  • 读取excel表
    要读取的excel表的如下所示
    这里写图片描述

    读取excel表的代码如下:

    dtrcolumns = ['year-month-day','start-time','end-time','user-id','gender','age'] #要读取的excel表的属性的列表,可以只读取一部分path = '....xlsx' #excel表的路径frame = pd.read_excel(path,names=dtrcolumns) #读取excel文件到Frame

    多个相同属性的Frame可以用concat连接起来

    for path in pathlist:    frame = pd.read_excel(path,names=dtrcolumns)    dtrpieces.append(frame)dtr_primary = pd.concat(dtrpieces,ignore_index=True) 
  • 用逻辑判断来过滤掉某些数据记录,去重

    过滤掉某些属性不符合要求的记录,如缺失,异常值

    dtr_notnull = dtr_primary[dtr_primary['gender'].notnull()&dtr_primary['age'].notnull()&(dtr_primary['age']>0)&(dtr_primary['age']<90)]

    根据某些列或列组合来去除重复记录

    dtr_user_gender_age = dtr_notnull[['user-id','gender','age']].drop_duplicates()
  • 某些键值(如本数据中的用户ID)的集合运算

    set_dtr_userid = set(dtr_user['user-id']) #用户ID的集合set_cdr_userid = set(cdr_user['user-id'])user_target = set_dtr_userid & set_cdr_userid # #两个用户ID集的交集
  • 接下来要用到的两个Frame
    这里写图片描述

  • groupby函数
user_df = dtr_data[['user-id','gender','age']].drop_duplicates() #以user-id,gender和age为键值,生成新的Frame,即user_dfcdr_in = cdr_data[cdr_data['iscallee']==1].groupby('user-id-0').size()#将cdr_data中满足一定要求的记录摘出来,然后按user-id-0分组,统计每组的个数,即满足要求的记录中每个user的记录的个数。cdr_in.name = 'in_sum' #cdr_in是个Series,这一行给其命名。
  • join 函数
    五种 JOIN 方式: 内连接(INNER), 全外连接(FULL OUTER), 左外连接(LEFT OUTER,简称左连接), 右外连接(RIGHT OUTER,简称右连接)和交叉连接(CROSS),见链接.

    user_df = user_df.join(cdr_in,on='user-id',how = 'left') #接入电话数
  • 映射map(自定义函数)

    • 划分

          def age_class(n): # 对年龄进行划分的函数        if n < 25:            return 'Y' # Young (18-24),        elif n < 35:            return 'YA' # Young-Adult (25-34)        elif n < 50:            return 'MA' # Middle-Age (35-49)        else:            return 'S' # Senior (> 49).    Ageclass = user_df.age.map(age_class)    Ageclass.name = 'age_class'    user_df['age_class'] = Ageclass   #年龄的四个分类特征
    • 更新

      def ymd_frome_timestamp(timestamp):   # 将时间戳字符串“2014-01-03”变成 “20140103”    return int(str(timestamp)[:10].replace('-',''))# 用户过夜上网的频率is_overnight = dtr_data['start-time'].map(ymd_frome_timestamp)!= dtr_data['year-month-day']dtr_data['is_overnight'] = is_overnight
  • 根据属性名删除某一列

    user_df = user_df.drop('in_M_sum',axis=1)#
  • 透视图

user_df.pivot_table(values='in_sum',index='age',columns='gender',aggfunc=np.std).plot(kind = 'line')

这里写图片描述

1 0
原创粉丝点击