You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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'):将列转换为数值类型,任何无法转换的内容(包括'-')都会被转为NaN
  • replace('-', pd.NA):提前将'-'替换为标准缺失值,确保转换逻辑更彻底
  • pd.notna(current_max):添加判断避免当列全为缺失值时,全局最大值被错误覆盖为NaN

内容的提问来源于stack exchange,提问作者Faz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:16:07