left join 重复数据_利用pandas进行数据清理的学习笔记

52453ac5ef3115d03d164efef46920ae.png

本文是《利用Python进行数据分析》的第七章<数据规整化:清理、转化、合并、重塑>的学习笔记。

c1b75a0edd078a8a96ec31cbe1633539.png

一、合并数据集

1.1数据库风格的DataFrame合并

数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的。这些运算是关系型数据库的核心,与SQL语言类似。pandas的merge函数是对数据应用这些算法的主要切入点。

先以一个简单的案例开始,如果没有指明要用哪个列进行连接,merge就会将重叠列的列名当做键,最好使用on显式指定一下。

bbf8d81918ce461730f2d7209505ed0f.png

ce87841cd8a7dc0d51abbfd187051391.png

默认merge做的是inner连接,结果是交集。此外还有left、right、outer连接,外连接求取的是键的并集。多对多连接产生的是行的笛卡尔积。

6a8d8c3390e6d45570369e540ba0b01e.png

9a43cb8f06d21bcabec6a1eea2d317f5.png

8c7032e50340da4afc6fa127d8d98b4c.png

要根据多个键进行合并,传入一个由列名组成的列表即可:

e162f36817745dde18318e8df345d807.png

6cca99b95d652e2e165f7af4dfd0ac78.png

1.2索引上的合并

有时,DataFrame中的连接键位于其索引中。在这种情况下,你可以传入left_index=True或right_index=True(或两个都传)以说明索引应该被用作连接键。

3a343e4a38f5822c4f5a86e3eb5a4299.png

1a52c9f6fd5e46bc8cf024191a31b057.png

对于层次化索引,必须以列表的形式指明用作合并键的多个列。

9bdab8dffc941e71a344ac21784d5318.png

b7c5ccf80ee43058fa7cf6bb6a3f2f57.png

DataFrame还有一个join实例方法,它能更为方便地实现按索引合并。

83f7c72707da28143c0874904eaef54a.png

对于简单的索引合并,还可以向join传入一组DataFrame

fe08c854c17c0b7816d48fe1cb51a30f.png

1.3轴向合并

另一种数据合并运算也被称为连接(concatenation)、绑定(binding)或堆叠(stacking)。NumPy有一个用于合并原始NumPy数组的concatenation函数:

9dce705cf0e1d34962f6867eedf01071.png

假设有三个没有重叠索引的Series,对这些对象调用concat可以将值和索引粘合在一起。

7f58acd430e0b0f6bd696469301a2f12.png

默认是在axis=0上工作的,也可以在axis=1上工作。

9381312e51ddef9de1d8bc35502c0783.png

同样的逻辑对于DataFrame对象也是一样的

1a072eb8e416ac398afbbc10dd2d9b83.png

64e3f78aecdf204391a999cf455beaf5.png

1.4合并重叠数据

使用Numpy的where函数,它用于表达一种矢量化的if-else

c92065840d6045ebb00b3cd727cd643d.png

b060a2c85c03d8933d8058c7c000a803.png

Series有一个combine_first方法,实现的也是一样的功能,而且会进行数据对齐。

48ca0ff8caf7948628860923ebe678a3.png

对于DataFrame,combine_first会做同样的事,用参数对象中的数据为调用者对象的缺失数据“打补丁”。

6e1d0270d9148f999ae70b6d5fad3e46.png

0a855c71042372a949ba00c1cd7a9e79.png

二、重塑和轴向旋转

有许多用于重新排列表格型数据的基础运算。这些函数也被称作重塑(reshape)或轴向旋转(pivot)运算。

2.1重塑层次化索引

使用stack将数据的列“旋转”为行,unstack是它的逆运算,将数据的行旋转为列。

22e94376041316ae1f948d5c6215ee71.png

4602a2348c6a8305528e0b74d9ee93de.png

2.2将“长格式”旋转为“宽格式”

DataFrame的pivot方法可以实现这个转换

三、数据转换

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

3.1移除重复数据

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行。使用drop_duplicates()方法去除重复值。

ea1c3ada493b7107c82920b34d3f8cef.png

4ed3a7976bf6847ad90e53f5a253c00b.png

上述方法默认会判断全部列,也可以指定部分列进行重复项判断。

da8d477f307983162bb0d3f9bb52c690.png

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

Series的map方法可以接受一个函数或含有映射关系的字典型对象。

45a0c1c16ff47968a31f0ee181e5b008.png

bf7ead8613f00dc238de16f3d28da4a5.png

我们也可以传入一个能够完成全部这些工作的函数

40c24d8bf7bbc82f4312081dc97702e3.png

3.3替换值

使用replace方法进行替换

b3cf2affaa99ea226bc1f76e02a132a0.png

如果希望一次性替换多个值,可以传入一个由待替换值组成的列表以及一个替换值;如果希望对不同的值进行不同的替换,则传入一个由替换关系组成的列表;传入的参数也可以是字典。

4354bdbdaa46aba57f6e22743dbefa15.png

3.4重命名轴索引

跟Series中的值一样,轴标签也可以通过函数或映射进行转换,从而得到一个新对象。如使用轴标签的map方法

fc19898cbe5576b7be068a062739f96c.png

还可以使用rename方法

0895a93df273e7927531e0e7052dc0f8.png

5d16d5d2882077a3d5c399a5a04b0629.png

3.5离散化和面元划分

为了便于分析,连续数据常常被离散化或拆分为“面元”(bin),可以使用cat函数。

c854696f218f6328b2164e102a1bb73f.png

cut有codes、categories、value_counts三个属性

24782dac659a7846230ab00876babf42.png

qcut可以根据样本分位数对数据进行面元划分

b8dac9f0e4cca230173dd34d256dee68.png

3.6检测和过滤异常值

3e41f93e2bf53d20b28a1e0fca570ea1.png

3.7排列和随机采样

使用numpy.random.permutation函数可以对列的顺序重排

e2dfbd5838b51a2c937014951e3da33e.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值