pandas—总结数据处理
Posted lengjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas—总结数据处理相关的知识,希望对你有一定的参考价值。
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(framel, frame2, left_on=‘id‘, right_on=‘sid‘) # 合并df,左右连接 pd.merge(framel,frame2,on=‘id‘,how=‘outer‘) # 合并df,外连接 pd.merge(framel, 干 rame2,on=[‘id1,1 brand1],how=‘outer ’) # 合并多列 pcLmerge( 干 ramel,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 千 rame.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()