熊猫分配回用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')

我仍然得到原始的,未转换的数据。所以我似乎做错了分配,但我不知道如何正确执行分配。帮助将不胜感激!

pp

使用大熊猫时,请避免NaN与整数结合

除非您有充分的理由,否则请避免这种做法。原因是pandas仅允许使用连续内存块中的数组进行矢量化计算。这只是与同类型的数据可能,例如,一系列的类型intfloatdatetime,但不是 object

NaN被考虑float因此,默认情况下,将带NaN力的整数组合起来pandas会将整个系列向上转换为float这会增加内存使用量,但是对于大多数用例而言,这不是问题。

如果要NaN与整数结合,则需要使用创建一个序列dtype=object,并pandas使用一系列指针。这在计算上和存储器上是昂贵的。除非绝对必要,否则不要这样做。

但是,如果您只是必须...

您可以object先将转换为,然后再将非NaN元素转换为整数:

df['B'] = df['B'].astype(object)

如上所述,您要pandas/numpy为系列中的每个项目使用一个指针。您不妨开始使用列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章