我在将python列表中的float转换为int时遇到问题。
列表中的元素之一如下:
{'artForm': 'Madur',
'artistName': 'Bharati Dolai',
'gender': 'F',
'district': 'Paschim Medinipur',
'phone': '',
'artisanCard': {'exists': 'N', 'cardNo': ''},
'dob': '',
'age': 45.0,
'year': 1971.0,
'education': 'I',
'childrenGoToSchool': 'Y'
}
我无法将age
和year
转换为int。
我的代码:
for i in range(len(d)):
int(d[i]['age'])
然后出现以下错误
ValueError: cannot convert float NaN to integer
所需的输出:
{'artForm': 'Madur',
'artistName': 'Bharati Dolai',
'gender': 'F',
'district': 'Paschim Medinipur',
'phone': '',
'artisanCard': {'exists': 'N', 'cardNo': ''},
'dob': '',
'age': 45, #converted to int
'year': 1971, #converted to int
'education': 'I',
'childrenGoToSchool': 'Y'
}
答案 0 :(得分:1)
您的年龄在列表中为NaNs
。如果无法删除这些内容,则可以尝试将代码包装在try-except
语句中:
num_of_nans = 0
for entry in d:
try:
entry['age'] = int(entry['age'])
except ValueError:
entry['age'] = 'Age not known'
num_of_nans += 1
您可能想要计算NaN的数量,以便您了解缺少多少个条目。
答案 1 :(得分:1)
使用dict comprehension
:
import math
print({k: int(v) if k == 'age' or k == 'year' and not math.isnan(v) else v for k,v in d.items()})
输出:
{
'artForm': 'Madur', 'artistName': 'Bharati Dolai', 'gender': 'F',
'district': 'Paschim Medinipur', 'phone': '',
'artisanCard': {'exists': 'N', 'cardNo': ''},
'dob': '', 'age': 45, 'year': 1971,
'education': 'I', 'childrenGoToSchool': 'Y'
}
编辑:
如果您只想要特定的列:
print({k: int(v) for k, v in d.items() if k == 'age' or k == 'year' and not math.isnan(v)})
输出:
{'age': 45, 'year': 1971}
答案 2 :(得分:0)
您的某些值是NaN
。另外,您错过了分配操作。
import math
for i in range(len(d)):
if not math.isnan(d[i]['age']):
d[i]['age'] = int(d[i]['age'])
答案 3 :(得分:0)
在try
块中执行相同的操作,因为'age'
键的某些值为NaN
:
for i in range(len(d)):
try:
d[i]['age'] = int(d[i]['age'])
except Exception as e1:
pass
这还将有助于避免出现'age'
键具有空字符串(例如''
)的情况。
答案 4 :(得分:0)
尝试一下:
SparkSession
答案 5 :(得分:0)
如果属性缺失或不正确,最好使用默认值。而且您不需要使用range来循环列表。
for u in d:
try:
u["age"] = int(u["age"])
except ValueError:
u["age"] = 0
try:
u["year"] = int(u["year"])
except ValueError:
u["year"] = 0
答案 6 :(得分:0)
一个班轮
WebElement