为何pd.read_csv()无法导入CSV文件,np.genfromtxt()却可以?
两者核心差异集中在编码处理、解析逻辑和容错机制上,具体如下:
编码处理逻辑本质不同
pd.read_csv()默认会将文件内容解码为字符串对象,它会自动采用系统默认编码(Windows多为cp1252,Linux/macOS多为utf-8)尝试解码。如果你的Loan-data.csv采用了非默认编码(比如latin1、gbk),文件中存在对应编码外的字符时,就会直接抛出UnicodeDecodeError。
而np.genfromtxt()默认以字节流形式读取数据,不会主动解码为字符串——它更偏向数值数据读取,文本内容会被当作字节串保留,或者在未指定dtype时自动推断类型,因此不会触发解码错误。文本解析的容错性不同
pandas对CSV的解析更注重文本数据的规范性,默认没有开启编码容错,遇到无法解码的字符直接终止并报错。numpy的genfromtxt则设计了更高的容错机制,遇到不符合预期的字符时,会尝试跳过、用默认值(如nan)填充,而非直接中断程序。额外参数的隐性影响
你使用np.genfromtxt时指定了delimiter=';',而pd.read_csv()默认分隔符是逗号(,)——不过你提到其他CSV能正常读取,说明分隔符不是本次解码错误的核心原因,但如果你的目标文件确实用分号分隔,后续测试pd.read_csv时建议加上delimiter=';'参数,避免解析格式问题干扰编码排查。
验证与解决建议
你可以尝试给pd.read_csv()指定编码参数来匹配文件实际编码,比如:
pd.read_csv('Loan-data.csv', delimiter=';', encoding='latin1')
或者用chardet库检测文件的真实编码,再对应设置encoding参数,就能解决解码报错问题。
内容的提问来源于stack exchange,提问作者G-Kolly

