python--学习笔记8 数据规整化,清理、转换、合并、重塑
合并数据集
pandas.merge可根据一个或多个键将不同的DataFrame中的行连接起来。
pandas.concat可以沿着一条轴将多个对象堆叠到一起。
combine_first可以将重复数据编接在一起,用一个对象中的值去填充另一个对象中的缺失值,有点像数据库中的全外连接。
数据集的合并(merge)或连接(join)运算时通过一个或多个键将行链接起来的。这些运算是关系型数据库的核心。
1 import pandas as pd 2 from pandas import DataFrame 3 4 df1 = DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)}) 5 df2 = DataFrame({'key':['a','b','d'],'data2':range(3)}) 6 pd.merge(df1,df2 ,on ='key')
如果两个对象的列名不同,也可以通过 left_on,right_on来分别指定。
默认merge做的是Inner连接,也可以用 how='outer'取外连接,左外 'left' 右外 ' right '等。
轴向连接
连接 concatenation,绑定 binding 或者堆叠 stacking。Numpy有一个用于合并原始Numpy数组的concatenation函数。
对Series调用concat可以将值和索引粘合在一起,默认情况下,concat是在axis=0上工作,产生一个新的Series。如果传入的axis=1,则结果会变成一个DataFrame。
合并重叠数据
我们使用Numpy的where函数,它用于表达一种矢量化的if-else。满足条件是输出b,不满足输出a。
1 a = Series([np.nan,2.5,np.nan,3.5,3.5,np.nan],index=['f','e','d','c','b','a']) 2 b = Series(np.range(len(a),dtype=np.float64),index=['f','e','d','c','b','a']) 3 b[-1]=np.nan 4 np.where(pd.isnull(a),b,a)
Series 有一个combine_first方法,也是实现的一样的功能。对于DataFrame, combine_first也会在列上做同样的效果。
数据转换
移除重复数据
DataFrame中常常出现重复行。duplicated方法返回一个布尔型的Series,表示各行是否是重复行。drop_duplicated方法,用于返回一个移除了重复行的DataFrame。这两个方法会默认判断全部列,你也可以指定部分列进行重复项判断。
字符串对象
内置字符串方法,split
val = 'a,b, guido' val.split(',')
输出:['a','b',' guido']
split 常常结合strip(修建空白符以及换行符)一起使用。
pieces = [x.strip() for x in val.split(',')]
用join方法传入一个列表
'::'.join(pieces)
输出:'a::b::guido'