如何在Pandas DataFrame中获取所有列(含非数值型)的最大值?
实现DataFrame所有列(含非数值型)的最大值计算
问题的核心在于Pandas中DataFrame.max()方法的numeric_only参数默认行为——当设置为None时,它会先尝试计算所有列,但受版本逻辑影响,可能自动过滤掉非数值列(比如字符串列)。要实现包含所有列的最大值输出,你可以试试以下两种方法:
方法1:显式设置numeric_only=False
直接在max()方法中指定numeric_only=False,强制Pandas处理所有列(只要列的元素类型支持max操作,比如字符串会按字典序比较):
import pandas as pd # 构造你的DataFrame data = pd.DataFrame({ 'Col_1': [5, 10], 'Col_2': ['xyz', 'abcd'], 'Col_3': [76, 100] }) # 计算所有列的最大值并转成你需要的格式 max_value = data.max(numeric_only=False).to_frame().T print(max_value)
输出结果:
Col_1 Col_2 Col_3 0 10 xyz 100
方法2:使用apply逐列计算最大值
如果第一种方法因为版本兼容问题不生效,可以用apply遍历每一列,单独计算最大值:
max_value = data.apply(lambda col: col.max()).to_frame().T print(max_value)
这个方法更通用,不管列类型是什么(只要该列的元素支持max运算),都会返回对应的最大值:
- 数值列返回数值最大值
- 字符串列返回字典序最大的字符串
- 日期列返回最晚的日期值
需要注意的是,如果DataFrame中存在无法比较的混合类型列(比如同一列既包含字符串又包含数值),两种方法都会抛出错误,此时需要先清洗数据或单独处理该列。
内容的提问来源于stack exchange,提问作者JD2775
相关产品推荐
相关产品推荐

