我有一个pandas数据框,我有一个名为'email'的列。我已经验证了dtype是对象。它包含通常格式化的电子邮件,例如xxx@yyy.com
当我这样做时:
$ df['emaillower'] = df['email'].apply(lambda x: x.lower())
我明白了:
Traceback (most recent call last):
File "<ipython-input-153-e951d53133eb>", line 1, in <module>
df['emaillower'] = df['email'].apply(lambda x: x.upper())
File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\series.py",
line
2355, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\_libs\src\inference.pyx", line 1569, in
pandas._libs.lib.map_infer (pandas\_libs\lib.c:66440)
File "<ipython-input-153-e951d53133eb>", line 1, in <lambda>
df['emaillower'] = df['email'].apply(lambda x: x.upper())
AttributeError: 'float' object has no attribute 'upper'
发生了什么事?
答案 0 :(得分:2)
“email”列中的一个条目是float,而不是字符串,并且它不知道如何在float上执行upper()。当一个条目为空并转换为NaN时,这是常见的 - 这被读作浮点数,这是错误的来源。这样的事情可以解决问题:
df['emaillower'] = df['email'].apply(lambda x: x.upper() if type(x) is str else 'empty')
另请注意,您调用了电子邮件列,但实际上是将其设为大写 - 这可能会在将来引起一些混淆
答案 1 :(得分:1)
建议使用pandas中的str函数
Button plus5b = (Button)findViewById(R.id.button);
plus5b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 1; i <= 5; i++) {
counterValue++;
}
counterdown.setText(String.valueOf(counterValue));
plussound.start();
}
});
我使用astye(np.str)来确保所有值都转换为字符串。