Pandas DataFrame列中字符串分隔数值列表求最大值异常问题
问题根源
你拆分得到的列表里所有元素都是字符串类型,Python对字符串的大小比较是按字符的ASCII编码逐位比对的:
比如字符串'10'和'3'比较时,会先比对第一位字符'1'和'3',因为'1'的ASCII码小于'3',所以系统会判定'10' < '3',也就得到了错误的最大值。
解决方案
方案1:修改现有循环逻辑
在取最大值前先把列表中所有元素转换为整数类型:
maxlist=[] for x in df['audience_max'].str.split(','): # 先转整数再求最大值 max_num = max(map(int, x)) maxlist.append(max_num) df['max_age'] = maxlist
方案2:更简洁的Pandas向量化写法
无需写显式循环,处理大数据量时性能更高:
df['max_age'] = df['audience_max'].str.split(',').apply(lambda x: max(map(int, x)))
运行后得到的max_age列会输出正确结果:
0 10 1 4 2 4 3 10 4 3 5 4 6 4 7 4 8 12 9 10 Name: max_age, dtype: int64
内容的提问来源于stack exchange,提问作者migheljackson
相关产品推荐
相关产品推荐

