如何在python中的列表中将float转换为int?

时间:2019-03-27 08:02:58

标签: python list

我在将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'
}

我无法将ageyear转换为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'
    }

7 个答案:

答案 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