我正在尝试将一系列市场转换为大写,以便可以与zip字典匹配。当我循环遍历字符串并转换为大写时,它运行良好,如下所示:
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'
这似乎是一个2秒的简单解决方案。当它必须附加新数据时,为什么会失败?
将变量打印到stdout
时,变量会隐式转换为字符串表示。所以,事实上,正在发生的是:
- 变量转换为字符串(如果
var
是变量,则等效于str(var)
( - 转换后的值写入
stdout
这意味着您需要执行额外的检查(如果希望省略非字符串值(或转换(如果希望对每个非字符串值执行显式转换(。
所以你需要修改你的代码来做到这一点:
def uppercase(series):
string_upper = []
for value in series:
string_upper.append(str(value).upper())