min(axis=1, numeric_only=True) 的作用

118 阅读2分钟

min(axis=1, numeric_only=True) 的作用

pandas DataFrame 中,某些情况下,数据可能包含 数值列非数值列(如字符串列) 。如果直接使用 min(axis=1),pandas 可能会尝试对 所有列 进行计算,导致 错误意外行为

numeric_only=True 选项的作用是:
忽略非数值列,确保 min() 仅对 数值列 计算,避免错误。


🔹 举例 1:含有字符串列,未指定 numeric_only=True

import pandas as pd

# 创建 DataFrame,包含数值和字符串列
df = pd.DataFrame({
    'modelCode': ['A1', 'A2', 'A3'],
    'price1': [100, 200, 150],
    'price2': [90, 220, 130],
    'channel': ['京东', '天猫', '淘宝']  # 非数值列
})

# 直接使用 min(axis=1) 会报错
df["min_price"] = df.min(axis=1)

❌ 结果(报错)

TypeError: '<=' not supported between instances of 'int' and 'str'

🔍 解释

  • min(axis=1) 默认会尝试计算所有列,包括 modelCodechannel(字符串列)。
  • 由于 数值和字符串不能比较,导致 TypeError

🔹 举例 2:使用 numeric_only=True

df["min_price"] = df.min(axis=1, numeric_only=True)
print(df)

✅ 结果

modelCodeprice1price2channelmin_price
A110090京东90
A2200220天猫200
A3150130淘宝130

🔍 解释

  • numeric_only=True 自动忽略modelCodechannel (非数值列) ,只在 price1price2 上计算 min()

🔹 举例 3:max 和 min 计算

df["max_price"] = df.max(axis=1, numeric_only=True)
df["price_range"] = df["max_price"] - df["min_price"]
print(df)

✅ 结果

modelCodeprice1price2channelmin_pricemax_priceprice_range
A110090京东9010010
A2200220天猫20022020
A3150130淘宝13015020

🔍 解释

  • min_price = min(axis=1, numeric_only=True) 计算最小值(仅数值列)。
  • max_price = max(axis=1, numeric_only=True) 计算最大值(仅数值列)。
  • price_range = max_price - min_price,计算 price1price2 的差值。

📌 总结

方法是否忽略非数值列会报错?
min(axis=1)不会(尝试计算所有列)可能会报错(如果有字符串列)
min(axis=1, numeric_only=True)会忽略非数值列不会报错,结果正确

最佳实践:如果 DataFrame 里有 非数值列,计算 min()max()务必加上 numeric_only=True 以避免错误。