使用Pandas分析含'-'的列时遇TypeError问题求助
解决Pandas中含'-'的列求最大值报错问题
问题原因
你的代码触发TypeError是因为change列同时包含字符串'-'和数值类型,导致列的 dtype 为object,直接调用.max()时无法对字符串与数值进行比较。
解决方案
通过三步处理即可解决:
- 将列中的
'-'替换为缺失值(NaN) - 把列转换为数值类型,无法转换的内容强制转为NaN
- 对处理后的数值列求最大值,Pandas会自动忽略NaN
修改后的完整代码
import os import pandas as pd folder_path = r"C:\Users\Documents" maximum_change = float('-inf') def update_maximum_values(df): global maximum_change if 'change' in df.columns: # 处理change列:替换'-'为缺失值,转换为数值类型 processed_change = pd.to_numeric(df['change'].replace('-', pd.NA), errors='coerce') current_max = processed_change.max() # 避免全为缺失值时覆盖全局最大值 if pd.notna(current_max): maximum_change = max(maximum_change, current_max) for filename in os.listdir(folder_path): if filename.endswith('test.xlsx'): file_path = os.path.join(folder_path, filename) change_df = pd.read_excel(file_path, sheet_name='Change') update_maximum_values(change_df) print(f"File: {filename}") if 'change' in change_df.columns: processed_change = pd.to_numeric(change_df['change'].replace('-', pd.NA), errors='coerce') current_max = processed_change.max() if pd.notna(current_max): print(f"Highest value in 'change': {round(current_max, 2)}") else: print("Highest value in 'change': No valid numeric values") print()
关键代码解释
pd.to_numeric(..., errors='coerce'):将列转换为数值类型,任何无法转换的内容(包括'-')都会被转为NaNreplace('-', pd.NA):提前将'-'替换为标准缺失值,确保转换逻辑更彻底pd.notna(current_max):添加判断避免当列全为缺失值时,全局最大值被错误覆盖为NaN
内容的提问来源于stack exchange,提问作者Faz
相关产品推荐
相关产品推荐

