一、问题描述:
(发现问题)在运行项目的过程中,做数据分析,会读取到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 类型。
二、解决思路:
按照警告的提示,解决方法有两种:
-
关闭 low_memory 模式;
-
或者指定列的数据类型;
(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文件过大,就会内存溢出,所以建议采取指定类型的方式。
参考:
- https://laowangblog.com/python-pandas-csv-dtypewarning-mixed-types.html
- https://blog.csdn.net/qq_41185868/article/details/108719300