数据规整化

一、合并数据集

 pandas对象数据通过pd.merge合并关系型数据,实现的是数据库连接操作;pd.concat可以沿着一条轴将多个对象堆叠到一起;实例方法combine_first可以将重复数据编接在一起,用一个对象的值填充另一个对象的缺失值。

1、数据库风格的DataFrame合并

该合并方式是通过一个或多个键将行链接起来。

df1=DataFrame({'key':[],'data1':[]});df2=DataFrame({'key':[],'data2':[]})

合并:pd.merge(df1,df2,on='key',how='inner')其中参数on显示指定用哪一列(多个列名组成的列表作为组合键)作为键进行连接,若没有指定,将重叠列列名当做键(列名不同可以用left_on/right_on分别指定),多对多产生的是行的笛卡尔积;参数how表示连接方式,包括内连接(inner)、外连接(outer)、左连接(left)、右连接(right),默认为内连接。suffixes选项用于指定附加到左右两个对象的重叠列名上的字符串。

2、索引上的合并

若DataFrame的连接键位于索引,pd.merge可以传入left_index=True或right_index=True(或两个都传)说明索引应该被用作连接键。

DataFrame还有一个join实例方法,更方便的实现按索引合并。left.join(right,on='key',how='outer'),默认是左连接,right还可以是一组DataFrame,[right,another]。

3、轴向连接

也被称作连接、绑定或堆叠。

(1)合并numpy数组的concatenation函数。np.concatenate([arr,arr],axis=1),axis=1是列,3*4->3*8;axis=0,3*4->6*4。

(2)合并pandas对象的concat函数。pd.concat([s1,s2,s3],axis=1),axis=1是列,默认axis=0。默认为外连接(并集),传入参数join='inner' 即可得到交集。通过参数join_axes指定要在其他轴上使用的索引;使用keys参数在连接轴上创建层次化索引,若沿着axis=1合并,则其会成为DataFrame的列头;若传入的是字典,则键值会被当做keys选项的值;若要忽视行索引,则传入参数ignore_index=True。

4、合并重叠数据

(1)利用np.where(c,a,b)来选择a值还是b值。

(2)combine_first用参数对象中的数据为调用者对象的缺失数据打补丁。

二、重塑和轴向旋转

重新排列表格型数据的基础运算。

1、重塑层次化索引

 stack:将数据的列“旋转”为行;unstack:将数据的行“旋转“为列。

 

 默认情况stack/unstack操作的是最内层,传入分层级别的编号或名称即可对其他级别进行操作。unstack操作可能会引入缺失数据,stack默认会滤除缺失数据。作为旋转轴的级别将会成为结果中的最低级别。

2、将“长格式”旋转为“宽格式”

DataFrame的pivot方法实现该转换,pivoted=df.pivot('data','item','value'),前两个参数分别用作行和列索引的列名,最后一个参数是用于填充数据列的列名。若有两个参与重塑的数据列,则结果会带有层次化的列。pivot是一个快捷方式:用set_index创建层次化索引,再用unstack重塑(unstacked=df.set_index(['data','item']).unstack('item')。

三、数据转换

以上都是数据的重排,下面介绍过滤、清理及其他转换工作。

1、移除重复数据

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行;DataFrame的drop_duplicates方法返回一个移除了重复行的DataFrame,这两个方法默认判断全部列;可以指定部分列进行重复项判断。默认保留第一个出现的值组合;传入take_last=True,则保留最后一个。

2、利用函数或映射进行数据转换

Series的map方法可以接受一个函数或含有映射关系的字典型对象。用于增加一列有与前面的列有对应关系的新列。

3、替换值

利用replace方法,可以替换一个值或者一个由待替换值组成的列表。

4、重命名轴索引

(1)轴标签也有一个map方法。

(2)利用rename方法。

5、离散化和面元划分

利用pandas的cut函数。例如将年龄划分为不同的年龄组。cats=pd.cut(ages,bins)返回对象含有labels和levels属性,默认区间左开右闭,通过参数right=False进行修改为左闭右开。如果bins传入的是面元数量不是边界列表,则根据数据的最小值和最大值计算等长面元。

qcut函数使用的是样本分位点,可以得到大小基本相等的面元(各个区间数据的数量相差不大)。

6、检测和过滤异常值

7、排列和随机采样

利用numpy.random.permulation进行随机重排序,再利用take方法按新顺序采样。

8、计算指标/哑变量

利用pandas的get_dummies函数实现:DataFrame的某一列含有k个不同值,可以派生出一个k列矩阵或DataFrame。

四、字符串操作

1、字符串对象方法

2、正则表达式

3、pandas中矢量化的字符串函数

data                 data.stack()              data.stack().unstack()      number one two three state   number            number  one  two  three     state                Ohio    one     0         state                       Ohio     0   1    2           two     1         Ohio     0    1     2      Colorado 3   4    5          three    2         Colorado 3    4     5                    Colorado one    3 (同上)

猜你喜欢

转载自www.cnblogs.com/zhenpengwang/p/10769725.html
今日推荐