使用numpy genfromtxt读取CSV时分隔符设为分号无法打开且弹出弃用警告
问题产生原因
- 读取功能失效的核心原因是分隔符配置与文件实际格式不匹配。你此前的测试已经验证,设置逗号作为分隔符时文件可以正常解析为numpy数组,说明
melb_data.csv本身的字段分隔符就是英文逗号,不存在分号分隔的结构。当强行将分隔符设为分号时,genfromtxt会按照分号切分每一行内容,由于CSV文件的每一行都没有分号字符,整行内容会被识别为单个长字符串字段,完全无法解析出结构化的列结构,自然不能生成可用的numpy数组。 VisibleDeprecationWarning警告的触发逻辑:代码中设置了dtype=None,该参数会让genfromtxt自动推断每一列的数据类型。当自动识别到列中包含字符串类型内容时,新版numpy读取未指定编码的文件字节流时,就会触发该弃用提示。这个警告本身和更换分号分隔符没有绑定关系,只要使用dtype=None读取带字符串列的本地CSV,在当前numpy版本下都会弹出该提示。
对应解决方法
- 读取当前目标CSV时,直接将
delimiter参数改回',',和此前能正常运行的配置保持一致,不要设置和文件实际格式不匹配的分隔符参数。 - 如果确实需要读取分号分隔格式的CSV文件,先确认目标文件的字段分隔符确实为分号,再配置
delimiter=';';同时为了消除编码弃用警告,给genfromtxt显式补充encoding参数,比如常用配置为encoding='utf-8',如果是包含中文的CSV可根据实际文件编码选择'gbk',如果需要跟随系统默认编码则设置encoding=None,可正常运行的参考代码如下:data2 = genfromtxt('C:\\Users\\DELL\\Desktop\\ML\\melb_data.csv',dtype = None,delimiter = ';',encoding='utf-8') - 如果不需要读取文件中的字符串列,也可以去掉
dtype=None配置,显式为各列指定数据类型(比如数值列指定为int/float),同样可以规避该编码警告。
内容的提问来源于stack exchange,提问作者Darshil Jariwala
相关产品推荐
相关产品推荐

