[每天一个python小技巧]遇到DtypeWarning 怎么办??

一、问题描述:

    (发现问题)在运行项目的过程中,做数据分析,会读取到csv文件,最后在运行代码的时候报了这样的错误:DtypeWarning

DtypeWarning: Columns (0,9,13,20,24,26,32,33,36,41,55,60,61,63,64) have mixed types.Specify dtype option on import or set low_memory=False.
  • 从警告的字面意思看是由于列(0,9,13,20,24,26,32,33,36,41,55,60,61,63,64)
    中存在多种数据类型导致的。例如数值 3 被认为了是 int 类型,但是数值 3.4 可能被认为是 str 类型。

二、解决思路:

按照警告的提示,解决方法有两种:

  1. 关闭 low_memory 模式;

  2. 或者指定列的数据类型;

(1)关闭 low_memory

data = pd.read_csv(f, low_memory=False)

(2)或者指定列的数据类型
例如我这里把这些列都让 Pandas 看作是 int:

data = pd.read_csv(f, dtype={"Columns1": int, "Columns2": int})

三、low_memory 是什么?

    Pandas 在读取 csv 文件时时按块读取的,并不会一次性读取,并且对于数据的类型“都靠猜”,所以就可能出现了 Pandas 在不同块对同一列的数据“猜”出了不同的数据类型,也就造成了上述的警告。

  • 而如果关闭 low_memory 功能时,Pandas 就会一次性读取 csv中的所有数据,自然对列的数据类型也只会猜测一次,就不会造成这种警告了。
  • 但是关闭 low_memory 时,一旦 csv文件过大,就会内存溢出,所以建议采取指定类型的方式。

参考:

  1. https://laowangblog.com/python-pandas-csv-dtypewarning-mixed-types.html
  2. https://blog.csdn.net/qq_41185868/article/details/108719300
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Monster_H777

我直说吧:你的奖励我的动力~

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

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

打赏作者

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

抵扣说明:

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

余额充值