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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:25:16