Python可以做的那些事!码农的世界程序员

利用Python进行数据分析(十)之数据规整化

2018-01-14  本文已影响40人  BrainZou

数据规整化

直接取得的数据大部分是不能直接使用的,所以需要经过清理转换等等,这一步就是数据规整化。

合并数据集

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补充。应该很好理解吧~

总结

本章主要讲的是数据规整化中的数据的合并连接!后面再接着学习其他的一些操作。

上一篇下一篇

猜你喜欢

热点阅读