我正在研究这个efw
数据框:
2 Year ISO_Code Countries INDEX Rank Quartile
3 2016 ALB Albania 7.54 34 1
4 2016 DZA Algeria 4.99 NaN 4
5 2016 AGO Angola 5.17 155 4
6 2016 ARG Argentina 4.84 160 NaN
7 2016 ARM Armenia 7.57 NaN 1
8 2016 AUS Australia 7.98 10 1
9 2016 AUT Austria 7.58 27 NaN
假设我想将Rank
和Quartile
列中的所有值都不是NaN
转换为整数。我尝试过efw[["Year", "Rank", "Quartile"]].astype(int)
,但始终收到此错误:ValueError: cannot convert float NaN to integer
是否有一种方法可以告诉Python“跳过” NaN
值,而仅将其他值转换为int
?
答案 0 :(得分:0)
您可以将它们转换为object
efw[["Year", "Rank", "Quartile"]].astype(object)
Out[58]:
Year Rank Quartile
0 2016 34 1
1 2016 NaN 4
2 2016 155 4
3 2016 160 NaN
4 2016 NaN 1
5 2016 10 1
6 2016 27 NaN
#efw[["Year", "Rank", "Quartile"]]=efw[["Year", "Rank", "Quartile"]].astype(object)
答案 1 :(得分:0)
我刚刚复制了您的要求,这是执行此操作的几种方法,但是我看到您已经有一个整数值,并且只有NaN
个丢失的位置,您可以将其转换为int或说{{ 1}},因为它们丢失了。
zero
方法1
直接从熊猫文档中摘录,Document Link For pandas.DataFrame.fillna
因此,由于您有多个列,但只想替换它们的一个子集中的NaN,您可以使用,我想最好将 >>> efw
Year ISO_Code Countries Index Rank Quartile
0 2016 ALB Albania 7.54 34 1
1 2016 DZA Algeria 4.99 NaN 4
2 2016 AGO Angola 5.17 155 4
3 2016 ARG Argentina 4.84 160 NaN
4 2016 ARM Armenia 7.57 NaN 1
5 2016 AUS Australia 7.98 10 1
6 2016 AUT Austria 7.58 27 NaN
替换为NaN
,而不是跳过空白..
0
如果要将更改永久保留在DataFrame中,则可以使用:
>>> efw.fillna({'Rank':'0', 'Quartile':'0'}, inplace=False)
Year ISO_Code Countries Index Rank Quartile
0 2016 ALB Albania 7.54 34 1
1 2016 DZA Algeria 4.99 0 4
2 2016 AGO Angola 5.17 155 4
3 2016 ARG Argentina 4.84 160 0
4 2016 ARM Armenia 7.57 0 1
5 2016 AUS Australia 7.98 10 1
6 2016 AUT Austria 7.58 27 0
方法2
您可以使用>>> efw.fillna({'Rank':'0', 'Quartile':'0'}, inplace=True)
>>> print(efw)
为列使用dtype
来检查dtype.kind
是否为数字。
apply
因此,您可以将apply与lambda函数一起使用,如下所示。
*dtype.kind:* A character code (one of ‘biufc’) identifying the general kind of data.
b boolean
i signed integer
u unsigned integer
f floating-point
c complex floating-point
方法3
OR对于数据框,您只需使用 >>> efw.apply(lambda x: x.fillna(0) if x.dtype.kind in 'biufc' else x.fillna('0'))
Year ISO_Code Countries Index Rank Quartile
0 2016 ALB Albania 7.54 34 1
1 2016 DZA Algeria 4.99 0 4
2 2016 AGO Angola 5.17 155 4
3 2016 ARG Argentina 4.84 160 0
4 2016 ARM Armenia 7.57 0 1
5 2016 AUS Australia 7.98 10 1
6 2016 AUT Austria 7.58 27 0
方法。这将把所有的NaN都转换为零,而与您拥有的列无关。
DataFrame.fillna()
注意:如果要删除>>> efw.fillna(0)
Year ISO_Code Countries Index Rank Quartile
0 2016 ALB Albania 7.54 34 1
1 2016 DZA Algeria 4.99 0 4
2 2016 AGO Angola 5.17 155 4
3 2016 ARG Argentina 4.84 160 0
4 2016 ARM Armenia 7.57 0 1
5 2016 AUS Australia 7.98 10 1
6 2016 AUT Austria 7.58 27 0
并将其留空,可以使用fillna('')
而不是fillna(0)
。