pandas—总结(3)数据处理

 

import numpy as np
import pandas as pd

framel = pd.DataFrame( {'id':['ball','pencil','pen','mug','ashtray'],
                                        'price': [12.33,11.44,33.21,13.23,33.62]})

frame2 = pd.DataFrame( {'id':['pencil','pencil','ball','pen'],
                                        'color': ['white','red','red','black']})

pd.merge(frame1,frame2,on='id')                                   # 按照指定基准列合并两个df,默认内连接
frame2.columns = ['brand','sid']                                    # 更换columns名称
pd.merge(frame1, frame2, left_on='id', right_on='sid')                 # 合并df,左右连接
pd.merge(frame1,frame2,on='id',how='outer')                            # 合并df,外连接
pd.merge(frame1,frame2,on=['id1,1 brand1],how='outer ’)              # 合并多列

pcLmerge(frame1,frame2,right_index=True, left 一 index=True)         # 按照index进行合并
 frame3.join(frame4)                                                # 按照index合并,df不能有相同的columns

np.concatenate([arrayl,array2],axis=0)                # 增加行的方式合并数组
np.concatenate([arrayl,array2],axis=1)                # 增加列的方式合并数组

pd.concat([sen,ser 2 ],axis=0)                                 # 增加行的方式合并Series或df
pd.concat([sen,ser 2 ],axis=1)                                 # 增加列的方式合并Series或df

pd.concat([sen,ser3],axis=1,join=' inner')                 # 按内连接方式合并
pd.concat([serl,ser2], keys=[1,2])                          # 在拼接的轴上创建等级索引

ser1.combine_first(ser2)                                    # 组合Series或df,重合index则保留ser1
serl[  : 3] .combine_first(ser2[  : 3])                  # 合并部分行


# 轴向旋转
framel = pd.DataFrame(np.arange(9).reshape(3,3),
                                    index=['white','black','red'],
                                    columns=['ball','pen’,'pencil'])
frame1.stack()                                                                   # df 转为多级索引的Series
ser.unstack()                                                                    # 多级索引的Series转为df
frame.unstack(0)                                                                 # 转置
wideframe = longframe. pivot (1 color',' item')                                  # 长格式转为宽格式

frame.duplicated()                                                           # 某一行在之前无相同行,返回True,否则返回False。
frame[frame.duplicated()]                                                    # 删除多余的重复行

# 映射的运用
frame.replace(newdict)                                                             # 利用映射替换元素
ser.replace(np.nan, 0)                                                             # 值替换
frame['price'] = frame["item"].map(price)                                    # 利用映射增加列,其中item和price分别为dict的key和value
frame.rename(index=dict1, columns=dict2)                                           # 利用映射重命名index,其中dict的key和value分别为df的旧、新index、columns
frame.rename(index={1:’first"}, columns={‘’item':'object'})                # 重命名部分index和columns

# 离散化和面元划分
cat=pd.cut(arr1, bins, labels=bin_names)                                          # 对数据分组,bins为分组的结点。bin_names为各区间的名称。
cat.levels                                                                        # 查看不同内部类别的名称
cat.labels                                                                        # 查看各元素所属区间的编号
pd.value_counts(cat)                                                              # 查看每个区间的元素个数

pd.cut(results, 5)                                                     # 将数据分为5个区间,区间长度相等
pd.qcut(results, 5)                                                    # 将数据分为5个区间,区间包含元素个数相等


# 排序
frame = pd.DataFrame(np.arange(25).reshape(5,5))               # 创建一个元素为整数且按照升序排列的DataFrame对象
new_order = np.random.permutation(5)                     # 定义一个新次序(顺序随机)
frame.take(new_order)                                                   # DataFrame对象的所有行应用take ()函数,把新的次序传给它
frame.take([3,4,2])                                                     # 对DataFrame对象的一部分进行排序操作。生成一个只包含特定索引范围的数据的数组

np.random.randint(0, len(nframe), size=3)                               # 在指定范围生成3个随机整数
frame.take(np.random.randint(0, len(nframe), size=3))                   # 随机取样

# 数据聚合

frame = pd.DataFrame({ 'color': ['white','red','green','red','green'],
              'object': ['pen','pencil','pencil','ashtray','pen'],
              'pricel' : [5.56,4.20,1.30,0.56,2.75],
                 'price2. : [4.75,4.12,1.60,0.75,3.15 ]})
group = frame['pricel'].groupby(frame['color'])                                                  #  按照指定列分组
group.groups                                                                            #  调用 GroupBy 对象的 groups 属性
group.mean()                                                          #   对每组数据聚合
ggroup = frame['pricel'].groupby([frame['color'],frame['object']])                   #   等级分组,按照指定多列进行分组

for name, group in frame.groupby('Ccolor’):                                                      # 组迭代
  print name
  print group

means = frame.groupby('color').mean().add_prefix('mean_')                            # 在列名称前加上前缀
group['price'].agg(func)                                                             # 使用自定义的func函数
group['pricel'].agg(['mean','std',func])                           # 同时使用多个函数
merge(frame,sums,left_on=_'color’,right_index=True)                                  # merge()聚合函数
frame.groupby('color').transform(np.sum).add_prefix()                                # transform()函数,作为参数的函数必须生成一个标量(聚合)(因为只有这样才能进行广播)
frame.groupby(['color','status']).apply( lambda x:x.max())                           # apply()

  

posted @ 2018-08-19 12:40  todaynowind  阅读(201)  评论(0编辑  收藏  举报