Python / Pandas - 将具有float值和Nones的列转换为int值和Nones

时间:2017-06-27 21:09:11

标签: python pandas lambda

我有一个浮点值的列,我想把它们变成整数。

pdsm:
    federation_unit_id  city_id
id                             
3                  8.0      3.0
7                 None     None
17                 8.0      3.0
18                 8.0      3.0
19                 8.0      9.0

它们的类型在列中的值是:class' float',除非None是NoneType。

如果我试试这个:

pdsm['federation_unit_id']=pdsm['federation_unit_id'].astype(int)
pdsm['city_id'].iloc[0]=pdsm.city_id.astype(int)

我明白了:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

如果我试试这个:

pdsm['federation_unit_id']=pdsm['federation_unit_id'].apply(lambda x: x.astype(int) if x is not None else None)
pdsm['city_id'].iloc[0]=pdsm.city_id.apply(lambda x: x.astype(int) if x is not None else None)

我明白了:

AttributeError: 'float' object has no attribute 'astype'

有人可以帮忙吗?我在这里疯了。

1 个答案:

答案 0 :(得分:3)

我认为在pandas中你不能在同一列中使用int和None或nan。它还没有得到支持。

如果你可以将None转换为0,你可以这样做:

df.fillna(0).astype(int)
Out[157]: 
    federation_unit_id  city_id
id                             
3                    8        3
7                    0        0
17                   8        3
18                   8        3
19                   8        9