如何获取DataFrame列的唯一值并筛选CODE列含多值的Excel文件
问题解决方案
报错原因
你遇到的AttributeError: 'tuple' object has no attribute 'append'由两个问题共同导致:
- Pandas 2.0及以上版本已正式移除
DataFrame.append()方法,调用该方法不会返回预期的拼接后DataFrame,会返回异常类型对象 - 原代码逻辑是将所有Excel数据合并为一个大DataFrame,不符合你需要保留「符合条件的单个文件对应DataFrame」的需求
正确实现代码
你可以直接用以下代码实现需求,最终target_dfs就是所有CODE列含2个及以上唯一值的DataFrame列表:
import os import pandas as pd path = "/path/to/file/" files = os.listdir(path) # 筛选xls文件,兼容大小写后缀 files_xls = [os.path.join(path, f) for f in files if f.lower().endswith('xls')] # 初始化结果列表:存储符合条件的单个DataFrame target_dfs = [] # 可选:初始化文件对应关系表,记录符合条件的文件路径和对应的CODE唯一值 station_info = [] for file_path in files_xls: # 读取单个Excel文件 data = pd.read_excel(file_path, 'Sheet 1', converters={'CODE': str}) # 统计CODE列唯一值数量 unique_code_count = data['CODE'].nunique() # 符合条件则加入结果列表 if unique_code_count >= 2: target_dfs.append(data) # 可选:记录文件信息 station_info.append({ "FILE": file_path, "UNIQUE_CODE": data['CODE'].unique().tolist() }) # 可选:将文件信息转为DataFrame方便查看 station_info_df = pd.DataFrame(station_info)
代码说明
- 用
nunique()方法直接统计列的唯一值数量,比drop_duplicates()更高效简洁 - 最终
target_dfs的每个元素对应一个符合要求的Excel文件的DataFrame,你可以按索引取用 - 新增的
station_info_df可以快速查看每个符合条件的文件对应的CODE值,不需要可以删除相关代码
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

