首页 > 代码库 > 数据分析之数据规整化
数据分析之数据规整化
数据规整化:清理、转换、合并、重塑
1.合并数据集
pandas对象中的数据可以通过一些内置的方式进行合并:
pandas.merge
pandas.concat:沿一条轴线将多个对象进行堆叠
combine_first:重复数据连接,用一个对象中的值填充另一个缺失值
1.1 数据库风格的DataFrame合并
pd.merge(df1,df2) 合并其中column名字相同的数据。
pd.merge(df1,df2, left_on = ‘1key‘, right_on = ‘rkey‘) 两个对象的列名不同,可以对其进行分别指定。
默认情况下,上述merge进行的是‘inner’连接(交集),并集(outer),依据左边键(left),依据右边键(right)
pd.merge(df1,df2,how=‘inner’)
若在键存在一对多是,产生的是行的笛卡尔积,左边2个b行,右边两个b行,最终合并结果中会有6个b行。
pd.merge(left,right,on=‘key1‘,suffixes=(‘_left‘,‘_right‘)) 为重复的列名添加下标。
pd.merge(left1,right1,left_on=‘key‘,right_index=True),试图链接的连接键位于索引之中。
left2.join(right2,how=‘outer’) 直接实现对索引的连接。
left2.join([right2, another])
1.2 轴向连接
另一种数据合并的方式叫做连接,绑定,堆叠。concat函数实现将值和索引粘合在一起。
pd.concat([s1,s2,s3])
默认情况下,该函数是在axis=0上进行工作,如果传入axis=1,则结果变为一个DataFrame(axis = 1列)
pd.concat([s1,s4], axis=1, join=‘inner‘) 传入join值可以实现得到他们的交集
pd.concat([s1,s4], axis = 1, join_axes =[[‘a‘,‘c‘,‘b‘,‘e‘]])在指定的轴上使用索引
result = pd.concat([s1,s2,s3],keys=[‘one‘,‘two‘,‘three‘])连接轴上创建一个层次化索引
result = pd.concat([s1,s2,s3],axis=1,keys=[‘one‘,‘two‘,‘three‘])按照axis=1对Series进行合并,则keys可以成为DataFrame的列头。
1.3合并重叠数据
b[:-2].combine_first(a[2:])
对缺失数据进行补齐
df1.combine_first(df2) 用括号内的数据为前置数据补充。
重塑和轴向旋转
有许多用于重新排列表格型数据的基础运算。这些函数也称为重塑(reshape)或轴转向(pivot)运算。
层次化索引为DataFrame数据重排列任务提供了良好的一致性。
stack:将数据的列“旋转”为行
unstac:将数据的行“旋转”为列
数据转换
本章到目前为止介绍的都是数据的重排。另一类重要操作则是过滤、清理以及其他的转换工作。
df1.duplicated() 对列进行判断,返回是否重复的布尔值
df2.drop_duplicates()返回一个删除了重复行的DataFrame
df2.drop_duplicates([‘k1‘]) 按照k1列删除重复项
上述默认保留第一个出现的值得组合
传入take_last = True 则保留最后一个:
data.drop_duplicates([‘k1‘,‘k2‘],take_last=True)
data[‘animal‘] = data[‘food‘].map(str.lower).map(meat_to_animal) 其中 meat_to_animal 是字典类型,字典的键为DataFrame中已经存在的列,字典的值为想要添加的新列。
替换
data.replace(-999,np.nan) 实现产生一个新的Series data.replace([-999, -1000], np.nan)
data.replace([-999,-1000],[np.nan, 0]) 同时传入的参数也可以是字典 data.replace({-999:np.nan, -1000:0})
data.index.map(str.upper)
离散化和面元划分
为了便于分析,连续的数据通常被离散化或者拆分为“面元”(bin)。
bins = [12, 25, 35, 60, 100]
cats = pd.cut(ages,bins) 对ages 这个列表按bins的分布进行划分。
cats.labels 输出的分类后具体属于哪一类。返回[1,2,3,1..] cats.levels pd.value_counts(cats)
数据分析之数据规整化