家庭作业问题要求我下载一个csv并将其转换为列表以进行清理。
该列表同时包含整数和字符串,我需要使用某种try和except语句来浮点数值,而except语句将忽略带有字符串的值并继续转换数值。
列表如下
raw_pd =['002', 'Ivysaur', 'GrassPoison', '405', '60', '62', '63', '80', '80', '60']
我用try和尝试了多个for循环,但它们似乎都没有得到想要的结果。
for item in raw_pd:
try:
float(item)
except:
pass
结果保持不变
我也尝试过
for item in raw_pd:
try:
int(item)
except:
print("This isn't an integer")
我希望这些值看起来像:
[002, 'Ivysaur', 'GrassPoison', 405, 60, 62, 63, 80, 80, 60]
但是当我再次查看列表时,一切仍然是浮动的
答案 0 :(得分:1)
您可以通过首先检查元素是否由数字组成来直接在列表推导中执行此操作:
raw_pd = ['002', 'Ivysaur', 'GrassPoison', '405', '60', '62', '63', '80', '80', '60']
[float(elt) for elt in raw_pd if elt.isdigit()]
[2.0, 405.0, 60.0, 62.0, 63.0, 80.0, 80.0, 60.0]
答案 1 :(得分:1)
除了上述答案之外,您还可以使用.isalpha()来检查列表中的元素是否仅包含字母字符,从而找到哪些数字元素,例如对负数使用.isnumeric()时,得到错误的答复。
让我知道这是否有帮助!干杯!
答案 2 :(得分:0)
强制转换为await
或int
不会更改列表中的值,而是对输入值进行操作并返回新的int或float。
float
x = '42'
int(x)
print(x)
'42'
希望这会有所帮助。
答案 3 :(得分:0)
正如@Reblochon Masque所说,您可以使用isdigit()
来测试字符串是数字还是否。您想要的代码是:
raw_pd = ['002', 'Ivysaur', 'GrassPoison', '405', '60', '62', '63', '80', '80', '60']
pd = [float(elt) if elt.isdigit() else elt for elt in raw_pd]
print(pd)
输出:
[2.0, 'Ivysaur', 'GrassPoison', 405.0, 60.0, 62.0, 63.0, 80.0, 80.0, 60.0]