pandas空值类型提升 NaN类型提升

什么是空值提升

当列中有空值时,列的原有类型会被忽略,同时会被提升到一个更『宽』或更『高』的类型来存储空值。

原始类型

提升到的类型用于存储空值(Promotion dtype for storing NAs)

floating

no change

object

no change

integer

cast to float64

boolean

cast to object

空值提升的不利影响

这有什么潜在的影响?空值提升有可能会提升内存开销。 

如何消除不利影响

1、创建一个csv文件data.csv,存储以下内容。

id,name,age
1,lily,18
2,lucy,19
3,tom,NaN
4,jim,nan

2、使用如下方式加载csv文件,并查看内存情况。

# 加载文件
df1=pd.read_csv("data.csv")
# 查看内存占用情况
df1.info(memory_usage="deep")
# 输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   id      4 non-null      int64
 1   name    4 non-null      object
 2   age     2 non-null      float64
dtypes: float64(1), int64(1), object(1)
memory usage: 434.0 bytes

age本是一个int类型,结果被提升为float64类型;用64位来存储,有些大材小用了。

3、指定兼容空值的类型

为了表示可能缺少值的整数列,pandas提供了可空的整数扩展类:

Int8Dtype
Int16Dtype
Int32Dtype
Int64Dtype

df = pd.read_csv("data.csv",dtype={'id':pd.Int64Dtype(),'name':object,'age':pd.Int8Dtype()})

df.info(memory_usage='deep')
#输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   id      4 non-null      Int64
 1   name    4 non-null      object
 2   age     2 non-null      Int8
dtypes: Int64(1), Int8(1), object(1)
memory usage: 414.0 bytes

内存使用从434bytes 降到了414bytes。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只要开始永远不晚

谢谢打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值