基于另一列条件删除重复列值遇逻辑及代码报错,求解决方案
问题解决步骤
1. 修复AttributeError错误
你的报错核心是**inplace=True的误用**:当调用df.drop(..., inplace=True)时,该方法会直接修改原DataFrame对象,返回值为None。你把这个None赋值给了df,导致后续调用df.to_excel()触发NoneType错误。
同时代码存在列名错误:df['col']应为df['col2'],你的DataFrame中没有col这个列。
修正后的基础代码:
import pandas as pd from pathlib import Path import os df = pd.DataFrame( { 'col1': ['red','blue','red','red','green','red','yellow', 'red', 'cyan', 'purple', 'pink', 'black', 'orange'], 'col2': ['red', 'green','orange'], } ) df_output = Path.home().joinpath("Desktop", "output file.xlsx") # 修正列名,去掉inplace=True,获取过滤后的新DataFrame df = df.drop(df[(df['col2'] == df["col1"])].index) df = df.drop(['col1'], axis=1) # 处理空DataFrame的情况 if not df.empty: df.to_excel(df_output, index=False) os.startfile(df_output) else: print("过滤后无数据,无法生成文件")
2. 处理“两列所有值均重复导致无值剩余”的边界情况
上述代码通过if not df.empty:的判断,处理了空DataFrame的场景。如果过滤后没有数据,会打印提示信息,避免强制生成空Excel文件引发的异常。
补充:更贴合“值重复删除”需求的实现
如果你的需求是删除col1中所有存在于col2的元素对应的行(而非仅位置上两列相等的行),可以用isin方法实现:
# 删除col1值在col2中的行 df = df[~df['col1'].isin(df['col2'])] df = df.drop(['col1'], axis=1)
这种方式会过滤掉col1中所有red、green、orange对应的行,更符合“值重复即删除”的描述。
内容的提问来源于stack exchange,提问作者Jose Daniel Rojas
相关产品推荐
相关产品推荐

