pandas读取CSV文件时出现警告:DtypeWarning: Columns (2) have mixed types. Specify dtype option on import or set low_memory=False

问题描述:

用pandas清洗数据时发现爆出告警,且清洗出来的数据大小格式不对

DtypeWarning: Columns (2) have mixed types. Specify dtype option on import or set low_memory=False

意思是第二列出现类型混乱,原因如下

pandas读取csv文件默认是按块读取的,即不一次性全部读取;
另外pandas对数据的类型是完全靠猜的,所以pandas每读取一块数据就对csv字段的数据类型进行猜一次,所以有可能pandas在读取不同块时对同一字段的数据类型猜测结果不一致。

解决方法:

方法一:

           按照提示,读入数据时指定参数low_memory=False,可以部分解决这类问题。

原来代码:

data1 = pandas.read_csv(sheet_names[i], header=None, names=['BatteryCode', 'ParameterCode', 'Value'])

添加指定参数后:

data1 = pandas.read_csv(sheet_names[i], header=None, names=['BatteryCode', 'ParameterCode', 'Value'], low_memory=False)

方法二:

            给出现问题的混合类型(mixed types)的列,指定类型。

代码示例:

data1 = pandas.read_csv(sheet_names[i],
                                header=None,
                                names=['BatteryCode', 'ParameterCode', 'Value'],
                                dtype={'BatteryCode': 'str', 'ParameterCode': 'str', 'Value': 'float'})  # 读文件
       

总结:

low_memory=False 参数设置后,pandas会一次性读取csv中的所有数据,然后对字段的数据类型进行唯一的一次猜测。这样就不会导致同一字段的Mixed types问题了。
但是这种方式真的非常不好,一旦csv文件过大,就会内存溢出;所以推荐用第2种解决方案。

参考博客

posted @ 2024-05-14 17:23  xunzf  阅读(679)  评论(0编辑  收藏  举报