微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我这样做了
    print(df.loc [df [‘B’].notnull(),’B’].astype(‘int’))
它起作用了.

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使用系列中每个项目的指针.您也可以开始使用列表.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐