首页app攻略pandas修改保存excel pandas保留excel格式

pandas修改保存excel pandas保留excel格式

圆圆2025-08-06 15:01:55次浏览条评论

Pandas DataFrame中保留指定列的后续重复项本文旨在详细讲解如何使用 Pandas DataFrame中筛选数据,仅保留指定列中所有重复值除了第一次出现以外的后续记录。我们将利用Pandas内置的duplicated()方法结合布尔索引,高效地实现这种常见的数据清洗和废弃任务,并通过具体代码示例进行演示。

在数据处理过程中,我们经常会遇到需要识别和处理重复数据的有时,我们希望完全删除重复项;而另一些时候,我们可能需要保留所有重复项,但排除它们第一次出现的那一条记录。例如,在一个客户解决交易记录表中,如果某个客户有笔交易,我们可能只关心其后续的交易记录,忽略其第一笔交易。pandas库提供了一个非常便捷的方法 duplicated() 来解决这些问题。 plicated() 方法

pandas.Series.duplicated() 或 pandas.DataFrame.duplicated() 方法用于标记DataFrame或Series中的重复行或重复值。它返回一个布尔Series,其中True表示该行或该值是重复的,False表示它是唯一的或第一次出现。

该方法有一个关键参数keep,它决定了如何处理重复项:keep='first' (默认值):标记除第一次出现之外的所有重复项为True。keep='last':标记除最后一次出现之外的所有重复项为True。keep=False:将所有重复项(包括第一次和最后一次)标记为 True。

对于本教程的目标——保留所有重复项,但保留第一次出现的那一条记录——我们恰好可以利用keep='first'的默认行为。当 duplicated() 方法在指定列上调用时,它会为该中所有非首次出现的重复值返回True。实现步骤与示例

假设我们有一个包含客户ID、支付日期和支付金额的DataFrame,我们希望筛选出每个客户除了第一次交易之外的所有交易记录。

数据原始示例:client_id payment_datevalue0678582021-05-30140.01682262021-05-30150.01414242021 -05-31100.01414242021-06-01150.01515252021-06-01150.01682262021-06-02115.00678582021-06-05143 .01515252021-06-0782.0

目标输出:client_id payment_datevalue1414242021-06-01150.01682262021- 06-02115.00678582021-06-05143.01515252021-06-0782.0

代码实现:

首先,创建示例DataFrame:import pandas as pddata = {'client_id': ['067858','168226','141424','141424','151525','168226','067858','151525'],'payment_date': ['2021-05-30','2021-05-30','2021-05-31','2021-06-01','2021-06-01','2021-06-02','2021-06-05','2021-06-07'],'value': [140.00,150.00, 100.00, 150.00, 150.00, 115.00, 143.00, 82.00]}df = pd.DataFrame(data)df[' payment_date'] = pd.to_datetime(df[' payment_date']) # 为日期类型转换 print(quot;原始DataFrame:quot;)print(df)print(quot;-quot; * 30)# 使用duplicate()方法筛选出除第一次出现之外的所有重复项#默认情况下,keep='first',这意味着它会将所有后续的重复项标记为True#然后通过布尔索引选择这些行out = df[df['client_id'].duplicated()]print(quot;\n筛选后面的DataFrame (保留后续重复项):quot;)print(out)登录后复制

代码解释:df['client_id'].duplicate(): 这一步对client_id列调用duplicated()方法。由于keep参数默认为'first',它会检查client_id列中的每一个值。如果之前有一个client_id已经出现过,那么当前这一行对应的布尔值为True;如果是第一次出现,则为False。例如,对于client_id为141424的记录:第一条141424 (索引2) -gt;False (第一次出现)第二条141424 (索引3) -gt; True (重复出现)df[...]:接下来,我们使用布尔索引将这个布尔系列恢复原始DataFrame df。只有对应布尔值为True的行才会被选中并构成新的DataFrame。

拓展应用:基于多列的重复项判断

如果重复的定义需要基于多列的组合,例如,我们认为只有当client_id和 payment_date都相同时才算重复,那么可以使用subset参数:#假设需要基于client_id和 payment_date的组合来判断重复# out_multi_col = df[df.duplicate(subset=['client_id', ' payment_date'])]# print(quot;\n基于多列判断重复并保留后续重复项:quot;)# print(out_multi_col)# (此示例数据中,client_id和 payment_date的组合重复,所以结果会是空的)登录后复制

在当前示例数据中,client_id和 payment_date的组合没有重复,因此上述代码将返回一个空DataFrame。这说明了子集参数的用法,以及如何影响重复项的定义。注意事项原DataFrame不变: duplicated()方法本身不会原始DataFrame。它返回一个布尔系列,你需要通过布尔索引将其校正DataFrame才能得到筛选修改后的结果。性能:对于非常大的数据集,duplicated()方法通常效率很高,因为它是在C语言层面实现的。保持参数的理解:一定要清楚keep参数的含义,它直接了哪些重复项会被高效标记为True。在本例中,keep='first'是关键,它确保我们只保留后续的重复项。总结

通过Pandas的duplicated()方法结合布尔索引,我们可以非常简单地实现“保留指定列中所有重复项”值除了第一次出现以外的后续”这一数据处理需求。duplicated()的keep参数是掌握这个技巧的关键。这种方法不仅仅适用于单个列,通过子集参数也能轻松记录基于多列组合的重复项判断,极大地提升了数据清理和稀疏的灵活性。

以上就是Pandas DataFrame中保留指定列的后续重复项的详细内容,更多请关注乐哥常识网相关文章!

Pandas Dat
怎样在抖音上获得更多的金币 怎样在抖音上获取浏览赚钱
相关内容
发表评论

游客 回复需填写必要信息