【杂谈】记一个关于Pandas读取csv文件的警告
-
前言
我习惯于把实验结果存储成csv文件,然后一般用pandas读取csv,如下
import pandas as pd df = pd.read('XXX.csv')
没想到就这么一行代码,今天竟然报警了。
警告信息
“DtypeWarning:Column (6,7) have mixed types. Specify dtype option on import or set low_memory=False.”
解决方案
经过搜索才知道,这个警告信息的重点在mixed types,原来pandas在读取数据的时候,由于没有明确每一列的数据类型,它是靠猜(某个算法)的,这个过程需要耗费比较大的memory,这就引出了以下解决方案
- 别让它猜,读取的时候明确每一列的数据类型,如
df = pd.read('XXX.csv', dtype={"model": np.string_, "predict": np.int8, "actual": np.int8, "confidence": np.float16}) df_new = df = pd.concat([df, df_new], ignore_index=True) # 明确数据类型后,这样我们就可以放心的去更新这个csv文件了
- 既然每一列的数据类型需要统一,那么存储的时候也要讲究规范,在存储的时候, 可以把所有小数类型统一以下,
df.to_csv('results.csv', float_format=np.float16, index=False)
启示
有些时候用同样的代码去读取和存储数据时,没有遇到问题,但是如果中途改动了代码,再想要读取和存储数据时,过程不规范所产生的问题可能就会暴露出来,注意一些基础的规范可以帮助我们避免遇到不必要的bug。