如何解决DtypeWarning列(23)混合类型警告?已试low_memory=False无效
解决Pandas读取CSV的DtypeWarning警告问题
问题说明
运行脚本时弹出警告:DtypeWarning: Columns (23) have mixed types. Specify dtype option on import or set low_memory=False,虽然能生成目标文件,但警告需要消除。之前试过在测试代码里用low_memory=False但没生效,得在现有脚本里找对位置修正。
解决方案
你之前的问题是没在脚本实际读取文件的代码行加参数,脚本里真正读取CSV的是mydata = pd.read_csv(f)这一行,把参数加在这里就行,有两种可选方案:
方案1:关闭分块类型推断(简单直接)
把读取CSV的代码改成:
mydata = pd.read_csv(f, low_memory=False)
这个参数会让Pandas不采用分块读取推断类型的逻辑,避免因分块时类型不一致触发警告。
方案2:指定第23列的类型(更严谨)
如果你清楚第23列的正确类型(比如是字符串),可以直接指定dtype,从根源避免类型混合问题:
# 示例:假设第23列是字符串类型,可根据实际情况修改类型 mydata = pd.read_csv(f, dtype={23: str})
修改后的完整脚本
import os import pandas as pd import tkinter from tkinter import messagebox root = tkinter.Tk() root.withdraw() directory = 'C:/path' ext = ('.csv') for filename in os.listdir(directory): f = os.path.join(directory, filename) if f.endswith(ext): head_tail = os.path.split(f) head_tail1 = 'C:/Output' k =head_tail[1] r=k.split(".")[0] p=head_tail1 + "/" + r + " - .csv" # 此处添加low_memory=False参数,替换原读取代码 mydata = pd.read_csv(f, low_memory=False) # 提取指定列并处理 new = mydata[["A","B","C","D"]] new = new.rename(columns={'D': 'F'}) new['F'] = 1 print(new.columns) new["B"] = (pd.to_datetime(new["B"], format="%d-%b", errors="coerce").dt.strftime("%#m-%#d").fillna(new["B"])) new.to_csv(p ,index=False) # 合并列并统计 merge_columns = ['A', 'B', 'C'] merged_col = ''.join(merge_columns).replace('ABC', 'G') new[merged_col] = new[merge_columns].astype(str).apply(lambda x: '.'.join(x), axis=1) new.drop(merge_columns, axis=1, inplace=True) new = new.groupby(merged_col).count().reset_index() new.to_csv(p, index=False) messagebox.showinfo("Parts has been counted", "New csv file can be found in C:/Path")
内容的提问来源于stack exchange,提问作者QuickSilver42
相关产品推荐
相关产品推荐

