利用Python进行数据分析(十)之数据规整化
数据规整化
直接取得的数据大部分是不能直接使用的,所以需要经过清理转换等等,这一步就是数据规整化。
合并数据集
pandas.merge根据一个或多个键连接不同的DataFrame。(类似数据库连接的内连接外连接左右连接等)
pandas.concat沿着一条轴把多个对象堆叠起来。
combine_first用一个对象的值填充到另一个对象的缺失值。(补充到这个对象上)
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)
:对于df1中缺失值用df2补充。应该很好理解吧~
总结
本章主要讲的是数据规整化中的数据的合并连接!后面再接着学习其他的一些操作。