python – Pandas返回一个用notnull()过滤的系列
你好开发者,
我目前正在学习大熊猫,并且仍然试图围绕如何分配值,例如转换为特定类型的值,返回原始数据帧. 更具体地说,我有这个数据帧: id A B 0 50000 12413 32885.0 1 50001 2040 43737.0 3 50002 2040 28015.0 4 50003 2040 NaN 5 50004 2040 28565.0 我的目标是将B列转换为整数,但保留NaN值,因此没有fillna(0).我想要这个: id A B 0 50000 12413 32885 1 50001 2040 43737 3 50002 2040 28015 4 50003 2040 NaN 5 50004 2040 28565 我这样做了 B 0 32885 1 43737 3 28015 4 28565 但是,如果我尝试将其分配回数据框: df.loc[df['B'].notnull(),'B'] = df.loc[df['B'].notnull(),'B'].astype('int') 我仍然得到原始的,未转换的数据.所以我似乎做错了,但我无法弄清楚如何正确地做到这一点. 解决方法
使用pandas,避免将NaN与整数相结合
除非你有充分的理由,否则请避免这种做法.原因是pandas只允许在连续的内存块中使用数组进行矢量化计算.这仅适用于相同类型的数据,例如一系列类型为int,float,datetime,但不是object. NaN被认为是浮动的.因此,将整数与NaN组合会强制将pandas强制转换为浮动整个系列.这会增加内存使用量,但对于大多数用例来说不是问题. 如果你想将NaN与整数结合起来,你需要用dtype = object创建一个系列,并让pandas使用一系列指针.这在计算和存储器密集上是昂贵的.除非绝对必要,否则不要这样做. 但如果你只是…… 在将非NaN元素转换为整数之前,您可以将一系列转换为对象: df['B'] = df['B'].astype(object) 如上所述,您要求pandas / numpy使用系列中每个项目的指针.您也可以开始使用列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |