Python含句点字符串转大写失败:打印正常却追加列表报错?
问题描述
我尝试将一组市场数据转为大写,以便匹配邮编字典。循环打印字符串转大写时正常运行:
def uppercase(series): for string in series: print(string.upper()) uppercase(markets.County)
但尝试将结果追加到新列表或使用列表推导式时失败:
def uppercase(series): string_upper = [] for string in series: string_upper.append(string.upper()) uppercase(markets.County)
报错提示无法将句点转为大写,但之前的代码明明可以运行。错误信息如下:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-25-2c8a689b8491> in <module> 6 string_upper.append(string.upper()) 7 ----> 8 uppercase(markets.County) <ipython-input-25-2c8a689b8491> in uppercase(series) 4 5 for string in series: ----> 6 string_upper.append(string.upper()) 7 8 uppercase(markets.County) AttributeError: 'float' object has no attribute 'upper'
这看似简单的操作为何在追加数据时失败?
原因分析
核心问题是你的数据中存在缺失值(NaN),在pandas里NaN属于float类型,没有upper()方法。
打印时没报错的原因是:循环打印过程中可能没遍历到NaN所在的行,或者部分环境下打印NaN时会显示为字符串形式的'NaN',但实际类型仍是float,不会触发报错;而执行append(string.upper())时,只要遇到一个NaN就会立刻抛出属性错误。
解决方案
方法1:过滤非字符串元素
在循环里先判断元素类型,只处理字符串:
def uppercase(series): string_upper = [] for string in series: if isinstance(string, str): string_upper.append(string.upper()) else: # 非字符串元素(如NaN)可选择保留或跳过 string_upper.append(string) return string_upper # 调用并获取结果 county_upper = uppercase(markets.County)
方法2:使用pandas内置方法(推荐)
直接用pandas的str.upper(),它会自动忽略NaN,代码更简洁高效:
markets['County_upper'] = markets.County.str.upper()
方法3:先填充缺失值
如果需要保留所有行,可先将NaN替换为占位符再转大写:
markets['County_upper'] = markets.County.fillna('').str.upper()
内容的提问来源于stack exchange,提问作者plotmaster473
相关产品推荐
相关产品推荐

