各位开发人员大家好,
我目前正在学习熊猫,仍在努力寻找如何分配值的方法,这些值我已转换为特定类型,例如,返回到原始数据框。
更具体地说,我有这个数据框:
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')
我仍然得到原始的,未转换的数据。所以我似乎做错了分配,但我不知道如何正确执行分配。帮助将不胜感激!
使用大熊猫时,请避免NaN
与整数结合
除非您有充分的理由,否则请避免这种做法。原因是pandas
仅允许使用连续内存块中的数组进行矢量化计算。这只是与同类型的数据可能,例如,一系列的类型int
,float
,datetime
,但不是 object
。
NaN
被考虑float
。因此,默认情况下,将带NaN
力的整数组合起来pandas
会将整个系列向上转换为float
。这会增加内存使用量,但是对于大多数用例而言,这不是问题。
如果要NaN
与整数结合,则需要使用创建一个序列dtype=object
,并pandas
使用一系列指针。这在计算上和存储器上是昂贵的。除非绝对必要,否则不要这样做。
但是,如果您只是必须...
您可以object
先将转换为,然后再将非NaN
元素转换为整数:
df['B'] = df['B'].astype(object)
如上所述,您要pandas
/numpy
为系列中的每个项目使用一个指针。您不妨开始使用列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句