(补充到那些目的上)澳门永利娱乐总站

数据规整化

间接获取的数目超越百分之五十是不能够平昔利用的,所以须求通过清理调换等等,这一步正是数额规整化。

merage#

pandas提供了三个近乎于关周全据库的连接(join)操作的办法<斯特朗>merage</Strong>,能够依附三个或四个键将分化DataFrame中的行连接起来,语法如下:

merge(left, right, how='inner', on=None, left_on=None, right_on=None,
      left_index=False, right_index=False, sort=True,
      suffixes=('_x', '_y'), copy=True, indicator=False)

用作贰个功用完善、庞大的语言,python的pandas库中的merge()扶助各个内外连接。

  • left与right:八个区别的DataFrame
  • how:指的是统一(连接)的主意有inner(内连接),left(左外连接),right(右外接连),outer(全外连接);默认为inner
  • on :
    指的是用以连接的列索引名称。必须存在右右七个DataFrame对象中,即使未有一些名且其余参数也未钦定则以五个DataFrame的列名交集做为连接键
  • left_on:左则DataFrame中用作连接键的列名;那一个参数中左右列名不均等,但象征的含义相同一时间极其管用。
  • right_on:右则DataFrame中用作 连接键的列名
  • left_index:使用左则DataFrame中的行索引做为连接键
  • right_index:使用右则DataFrame中的行索引做为连接键
  • sort:暗中同意为True,将统一的数目开展排序。在大部处境下设置为False能够增进品质
  • suffixes:字符串值组成的元组,用于钦赐当左右DataFrame存在同样列名时在列名后边附加的后缀名称,默感到(‘_x’,’_y’)
  • copy:默以为True,总是将数据复制到数据结构中;大大多情形下设置为False能够拉长质量
  • indicator:在
    0.17.0中还扩展了贰个来得合併数据中来自情况;如只来和煦于左侧(left_only)、两者(both)

    sql中的

    SELECT
    FROM df1
    INNER JOIN df2
    ON df1.key = df2.key;

    SELECT

    FROM df1,df2 where df1.key=df2.key

 

pandas中用:

pd.merge(df1, df2, on='key')

接下来正是种种外连接了:

pd.merge(df1, df2, on='key', how='left')

 

how变成left/right。全链接outer。

联合数据集

pandas.merge依照七个或多个键连接差异的DataFrame。(类似数据库连接的内连接外连接左右一而再等)
pandas.concat沿着一条轴把四个对象堆放起来。
combine_first用二个目标的值填充到另叁个对象的缺失值。(补充到那几个目的上)

示例##

#coding=utf-8
from pandas import Series,DataFrame,merge
import numpy as np
data=DataFrame([{"id":0,"name":'lxh',"age":20,"cp":'lm'},{"id":1,"name":'xiao',"age":40,"cp":'ly'},{"id":2,"name":'hua',"age":4,"cp":'yry'},{"id":3,"name":'be',"age":70,"cp":'old'}])
data1=DataFrame([{"id":100,"name":'lxh','cs':10},{"id":101,"name":'xiao','cs':40},{"id":102,"name":'hua2','cs':50}])
data2=DataFrame([{"id":0,"name":'lxh','cs':10},{"id":101,"name":'xiao','cs':40},{"id":102,"name":'hua2','cs':50}])

print "单个列名做为内链接的连接键\r\n",merge(data,data1,on="name",suffixes=('_a','_b'))
print "多列名做为内链接的连接键\r\n",merge(data,data2,on=("name","id"))
print '不指定on则以两个DataFrame的列名交集做为连接键\r\n',merge(data,data2) #这里使用了id与name

#使用右边的DataFrame的行索引做为连接键
##设置行索引名称
indexed_data1=data1.set_index("name")
print "使用右边的DataFrame的行索引做为连接键\r\n",merge(data,indexed_data1,left_on='name',right_index=True)


print '左外连接\r\n',merge(data,data1,on="name",how="left",suffixes=('_a','_b'))
print '左外连接1\r\n',merge(data1,data,on="name",how="left")
print '右外连接\r\n',merge(data,data1,on="name",how="right")
data3=DataFrame([{"mid":0,"mname":'lxh','cs':10},{"mid":101,"mname":'xiao','cs':40},{"mid":102,"mname":'hua2','cs':50}])

#当左右两个DataFrame的列名不同,当又想做为连接键时可以使用left_on与right_on来指定连接键
print "使用left_on与right_on来指定列名字不同的连接键\r\n",merge(data,data3,left_on=["name","id"],right_on=["mname","mid"])

输出为:

单个列名做为内链接的连接键
   age  cp  id_a  name  cs  id_b
0   20  lm     0   lxh  10   100
1   40  ly     1  xiao  40   101
多列名做为内链接的连接键
   age  cp  id name  cs
0   20  lm   0  lxh  10
不指定on则以两个DataFrame的列名交集做为连接键
   age  cp  id name  cs
0   20  lm   0  lxh  10
使用右边的DataFrame的行索引做为连接键
   age  cp  id_x  name  cs  id_y
0   20  lm     0   lxh  10   100
1   40  ly     1  xiao  40   101
左外连接
   age   cp  id_a  name  cs  id_b
0   20   lm     0   lxh  10   100
1   40   ly     1  xiao  40   101
2    4  yry     2   hua NaN   NaN
3   70  old     3    be NaN   NaN
左外连接1
   cs  id_x  name  age   cp  id_y
0  10   100   lxh   20   lm     0
1  40   101  xiao   40   ly     1
2  50   102  hua2  NaN  NaN   NaN
右外连接
   age   cp  id_x  name  cs  id_y
0   20   lm     0   lxh  10   100
1   40   ly     1  xiao  40   101
2  NaN  NaN   NaN  hua2  50   102
使用left_on与right_on来指定列名字不同的连接键
   age  cp  id name  cs  mid mname
0   20  lm   0  lxh  10    0   lxh

 

join方法提供了一个便利的法子用于将八个DataFrame中的差异的列索引合併成为多少个DataFrame。

里面参数的意义与merge方法基本一样,只是join方法暗中同意为左外连接how=left。

示例:

#coding=utf-8
from pandas import Series,DataFrame,merge

data=DataFrame([{"id":0,"name":'lxh',"age":20,"cp":'lm'},{"id":1,"name":'xiao',"age":40,"cp":'ly'},{"id":2,"name":'hua',"age":4,"cp":'yry'},{"id":3,"name":'be',"age":70,"cp":'old'}],index=['a','b','c','d'])
data1=DataFrame([{"sex":0},{"sex":1},{"sex":2}],index=['a','b','e'])

print '使用默认的左连接\r\n',data.join(data1)  #这里可以看出自动屏蔽了data中没有的index=e 那一行的数据
print '使用右连接\r\n',data.join(data1,how="right") #这里出自动屏蔽了data1中没有index=c,d的那行数据;等价于data1.join(data)
print '使用内连接\r\n',data.join(data1,how='inner')
print '使用全外连接\r\n',data.join(data1,how='outer')

结果为:

使用默认的左连接
   age   cp  id  name  sex
a   20   lm   0   lxh    0
b   40   ly   1  xiao    1
c    4  yry   2   hua  NaN
d   70  old   3    be  NaN
使用右连接
   age   cp  id  name  sex
a   20   lm   0   lxh    0
b   40   ly   1  xiao    1
e  NaN  NaN NaN   NaN    2
使用内连接
   age  cp  id  name  sex
a   20  lm   0   lxh    0
b   40  ly   1  xiao    1
使用全外连接
   age   cp  id  name  sex
a   20   lm   0   lxh    0
b   40   ly   1  xiao    1
c    4  yry   2   hua  NaN
d   70  old   3    be  NaN
e  NaN  NaN NaN   NaN    2

 

还会有一种连接形式:concat

concat方法约等于数据库中的全连接(UNION
ALL),能够钦定按某些轴实行延续,也得以钦赐连接的点子join(outer,inner
唯有那二种)。

与数据库分化的是concat不会去重,要到达去重的功用能够使用drop_duplicates方法

concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
           keys=None, levels=None, names=None, verify_integrity=False, copy=True):

 

 示例:

#coding=utf-8
from pandas import Series,DataFrame,concat

df1 = DataFrame({'city': ['Chicago', 'San Francisco', 'New York City'], 'rank': range(1, 4)})
df2 = DataFrame({'city': ['Chicago', 'Boston', 'Los Angeles'], 'rank': [1, 4, 5]})
print '按轴进行内连接\r\n',concat([df1,df2],join="inner",axis=1)
print '进行外连接并指定keys(行索引)\r\n',concat([df1,df2],keys=['a','b']) #这里有重复的数据
print '去重后\r\n',concat([df1,df2],ignore_index=True).drop_duplicates()

 

 输出结果为:

按轴进行内连接
            city  rank         city  rank
0        Chicago     1      Chicago     1
1  San Francisco     2       Boston     4
2  New York City     3  Los Angeles     5
进行外连接并指定keys(行索引)
              city  rank
a 0        Chicago     1
  1  San Francisco     2
  2  New York City     3
b 0        Chicago     1
  1         Boston     4
  2    Los Angeles     5
去重后
            city  rank
0        Chicago     1
1  San Francisco     2
2  New York City     3
4         Boston     4
5    Los Angeles     5

 

 

 

 

pandas.merge合并

pd.merge(df1,df2,on='key'):根据key那列连接(df1,df2都有key列)。
pd.merge(df1,df2,left_on='lkey',right_on='rkey'):依据右边的lkey和左臂的rkey实行连接。
暗中认可实行的是内连续,即获取交集,左右key值单独有的都去掉了。

须求修改时使用参数how,如:how='outer',how='left',how='right默认是how=’inner’。
依据多少个键合併:on=['key1','key2'](类似把将key1和key2多少个键组合在联合,当成单个连接键)
再也列名的处理:比如三个列名同样,用了其中二个(key1)作为on连接,那么其余那列(key2)肯定就不能够用一样的名字。能够利用参数suffixes=(‘_left’,’_right’)就能够在新调换的列key2_left和key2_right。

目录上的统一

临时候候用的并不是列来归并,不时候使用的是索引。那么将要用到left_index=True或right_index=True(也许多少个都传)表明索引被用来三番五次。写法如:pd.merge(left1,right1,left_on='key',right_index=True)

自然除了上面说的这种,还是能够利用DataFrame的join方法。left2.join(right2,how='outer')分化的是,它暗许的是左连接。
也能促成DataFrame的列与索引的连日:`left1.join(right1,on=’key’)完成left1的key列和right1的目录连接。

轴向连接

复杂的轴向上连接使用concat函数,相关参数如下:

参数 说明
objs 参与连接的pandas对象的列表或字典。唯一必须的参数
axis 指明连接的轴向,默认为0
join "inner" , "outer“其中之一默认为“outer二指明其他轴向上的索引是按交集(inner)还是并集(outer)进行合并
join_axes 指明用于其他n-t条轴的索引.不执行并集/文集运算
keys 与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
levels 指定用作层次化索引各级别上的索引,如果设里了keys的话
names 用于创建分层级别的名称.如果设置了keys和(或)levels的话
verify_integrity 检查结果对象新轴上的重复情况.如果发现则引发异常。默认 (False)允许重复
ignore_index 不保留连接轴上的索引,产生一组新索引range(total_length)

统一重叠数据

什么看头啊?先看下NumPy中的where函数np.where(pd.isnull(a),b,a),你早晚早已能从字面上理解这么些的意思了,正是对a决断若是为null则取b的数量,否则的话取a。
而pandas中对于DataFrame和Series有combine_first方法df1.combine_first(df2):对于df第11中学缺点和失误值用df2补充。应该很好通晓呢~

总结

本章主要讲的是多少规整化中的数据的合併连接!后边再跟着学习别的的有个别操作。

相关文章