dataframe 列 去重_如何利用Pandas实现行对齐和列对齐?

本文介绍了如何利用Pandas进行数据对齐,特别是在行索引和列标签上的操作。通过实例展示了在不同情况下,如行索引不完全匹配时,Pandas如何自动对齐数据,并在数据框中插入新的列。同时,文章讨论了数据对齐的基本原理,帮助读者更好地理解和应用Pandas进行数据分析。
摘要由CSDN通过智能技术生成

4272b920b64e5a6b64ca5a28ca11a7a3.png

  Pandas 使用行索引和列标签表达和分析数据,分别对应 axis=0, axis=1,行索引、列标签带来一些便捷的功能。那么如何利用Pandas实现行对齐和列对齐?今天番茄加速就来讲一下。

  如果玩Pandas,还没有注意到对齐 alignment,这个特性,那该好好看看接下来的分析。

  基于行索引的对齐,与基于列标签的对齐,原理是一致的,它们其实相当于字典的 key,起到对齐数据作用。但是,这种说法抽象了些,没有例子不好想象出对齐的作用。

  下面使用google app store 重点分析“行对齐”功能,理解它后,列对齐也自然理解。

  导入包:

  import pandas as pd

  import numpy as np

  import matplotlib.pyplot as plt

  import seaborn as sns

  版本号:

  print(pd.__version__)

  print(np.__version__)

  print(sns.__version__)

  1.0.1

  1.18.1

  0.11.0

  导入数据:

  df = pd.read_csv('kaggle-data/googleplaystore.csv')

  df.head(3)

  图片

  剔除一些异常数据后得到 df_normal,根据 Rating 为每个 app 排名

  rank = df_normal.Rating.rank(method='min',na_option='bottom',ascending=False)

  rank.head(3)

  method 参数指定:Rating 值相等时排名取小,na_option 指定空值排到最后,ascending 指定倒序

  将上面得到的新列 rank 插入 df_normal 中:

  df_normal.insert(2,'rank', rank, allow_duplicates=True)

  df_normal.head(3)

  因为 df_normal 和 rank 的行索引 index 都是从0 开始的自增,所以即便没有自动对齐,也是准确的:

  但是,你看下面的情况,自动对齐的方便性就能显示出来

  根据 Reviews 列排序

  ### 根据 Reviews 次数从少到多排序

  df_by_reviews = df_normal.sort_values(by='Reviews')

  df_by_reviews.head(3)

  得到 df_by_reviews ,注意它的 index 不是按照从0自增

  图片

  此时在 df_by_reviews 中,插入 rank 还能确保数据对齐吗

  ### 此时插入排名 rank 列,数据会自动对其

  df_by_reviews.insert(3,'rank_copy',rank)

  df_by_reviews.head()

  看到 rank 列 和 rank_copy 列相等,通过下面一行代码验证出来:

  len( df_by_reviews[ df_by_reviews['rank'] == df_by_reviews['rank_copy'] ]) == len(df_by_reviews)

  由此可见,Pandas已经为数据自动对齐。

  但是,如果 rank 的 index 某些索引值没有出现在 df_by_reviews中, 此时又会怎么对齐呢?

  ### 如果后者index序列中某些值没有出现在df_by_reviews的index中

  ### 举个例子

  df_test = pd.DataFrame({'a':[1,4,7],'b':[5,2,1]},index=[4,3,1])

  ser = pd.Series(index=[3,2,1],data=[0,9,8])

  结果ser 索引值 2 在 df_test 中找不到对应,故为 NaN

  以上就是 Pandas 数据对齐的一个基本介绍,知道这些基本原理后再去使用Pandas 做数据分析,心里才会更有谱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值