将NaN和字符串列表转换为int?

时间:2016-08-15 10:52:29

标签: python

我在Python中有以下列表:

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0']

我想将所有内容转换为int。我希望带有斜杠的字符串取第一个值。

这是我尝试过的:

newlist = [int(str(x).split('/')[0]) for x in mylist]

但这并不适用于NaN值。处理字符串和NaN值的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用数学库中的isnan函数来检查float是否为NaN,但是它将float作为参数,因此您必须先将项目转换为float。您可以选择是跳过NaN,还是将其保存为默认值。在下面的代码中,NaN被保存为int 0

import math

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0']

newlist = []

for item in mylist:

    x = float(str(item).split('/')[0])

    if not math.isnan(x):
        newlist.append(int(x))
    else:
        newlist.append(0)

print newlist

答案 1 :(得分:0)

我们知道, NaN总是!= NaN 使用以下方法将所有内容转换为整数

mylist = [float('NaN'), u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0']
newList = [0 if (not item or (item != item)) else int(str(item).split('/')[0]) for item in mylist]
print(newList)

输出:

[0, 2, 3, 1, 4, 1, 2, 0]

答案 2 :(得分:0)

pandas.isnull的另一个解决方案:

import pandas as pd
import numpy as np

mylist = [np.nan, u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0']

newList = [0 if pd.isnull(item) else int(str(item).split('/')[0]) for item in mylist]
print(newList)
[0, 2, 3, 1, 4, 1, 2, 0]

Pandas解决方案将NaN替换为'0' Series.fillna,按str.split拆分,按str[0]获取列表的第一个元素,然后按{{3 }}:

mylist = [np.nan, u'2', u'3', u'1', u'4', u'1/2', u'2/3', u'0']

newList = pd.Series(mylist).fillna('0').str.split('/').str[0].astype(int)
print(newList)
0    0
1    2
2    3
3    1
4    4
5    1
6    2
7    0
dtype: int32

print(newList.tolist())
[0, 2, 3, 1, 4, 1, 2, 0]
相关问题