加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas返回一个用notnull()过滤的系列

发布时间:2020-12-20 11:05:08 所属栏目:Python 来源:网络整理
导读:你好开发者, 我目前正在学习大熊猫,并且仍然试图围绕如何分配值,例如转换为特定类型的值,返回原始数据帧. 更具体地说,我有这个数据帧: id A B0 50000 12413 32885.01 50001 2040 43737.03 50002 2040 28015.04 50003 2040 NaN5 50004 2040 28565.0 我的目标
你好开发者,

我目前正在学习大熊猫,并且仍然试图围绕如何分配值,例如转换为特定类型的值,返回原始数据帧.

更具体地说,我有这个数据帧:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读