基于条件去重:Pandas数据处理及Excel导出问题求助
解决Pandas删除重复值并导出Excel的问题
需求说明
删除col1中所有出现在col2里的值,删除col2列后将结果导出到Excel表格。
初始数据
import pathlib from pathlib import Path import os import pandas as pd df=pd.DataFrame( { 'col1': ['red','blue','red','red','green','red','yellow', 'red', 'cyan', 'purple', 'pink', 'black', 'orange'], 'col2': ['red', 'green','orange'], } )
预期输出
df=pd.DataFrame( { 'col1': ['blue', 'yellow', 'cyan', 'purple', 'pink', 'black'] } )
错误代码问题分析
- 匹配逻辑错误:
df[(df['col1'] == df['col2'])]是逐行对比两列值,但两列长度不一致(col1有13行、col2仅3行),触发广播机制后筛选结果完全不符合需求,应该用isin()判断col1值是否在col2的集合中。 inplace用法错误:df = df.drop(['col2'], inplace=True)中,inplace=True会让drop方法返回None,直接赋值给df会导致后续操作报错。- 参数位置错误:
os.startfile(File_path, index=False)里的index=False是to_excel的参数,不应放在os.startfile中,且File_path未定义。
修正后的完整代码
import pathlib from pathlib import Path import os import pandas as pd df_output = Path.home().joinpath("Desktop", "Remaining colors.xlsx") df=pd.DataFrame( { 'col1': ['red','blue','red','red','green','red','yellow', 'red', 'cyan', 'purple', 'pink', 'black', 'orange'], 'col2': ['red', 'green','orange'], } ) # 筛选col1中不在col2里的值,仅保留col1列 df = df.loc[~df['col1'].isin(df["col2"]), ['col1']] # 导出到Excel,不生成默认索引 df.to_excel(df_output, index=False) # 打开导出的文件 os.startfile(df_output)
代码解释
~df['col1'].isin(df["col2"]):isin()判断col1每个值是否存在于col2中,~取反得到所有不在col2中的行。df.loc[..., ['col1']]:直接保留col1列,无需再单独删除col2,一步得到符合预期的数据结构。to_excel(index=False):导出时不添加默认索引列,与预期输出完全匹配。
内容的提问来源于stack exchange,提问作者Jose Daniel Rojas
相关产品推荐
相关产品推荐

