Numpy数组导出CSV时True/False显示为大写的问题排查
问题:Numpy数组转CSV后布尔字符串大小写异常
问题详情
我对Numpy数组y_pred执行了如下处理:
y_pred=y_pred.astype('|S5') for i in range(len(y_pred)): if y_pred[i]==b"1": y_pred[i]="True" elif y_pred[i]==b"0": y_pred[i]="False" y_pred=y_pred.astype(str) print(y_pred) combined_data = pd.DataFrame({'PassengerId': df2['PassengerId'], 'Transported': y_pred}) combined_data.to_csv('predictions_logistic.csv', index=False)
控制台输出为:['True' 'True' 'True' ... 'True' 'True' 'False']
但打开生成的predictions_logistic.csv文件后,发现Transported列显示的是TRUE和FALSE,而非预期的True和False。请问这是因为被识别为布尔类型导致的吗?还是DataFrame或to_csv方法存在问题?请帮忙解决。
原因分析
核心原因是Pandas的类型自动推断机制:尽管你把数组转成了字符串类型,但'True'/'False'字符串会被Pandas识别为布尔值的等价表示,在写入CSV时自动转换为全大写的TRUE/FALSE格式。
解决方法
方法1:强制指定列的字符串类型
创建DataFrame时,明确声明Transported列的类型为字符串,阻断Pandas的自动类型推断:
combined_data = pd.DataFrame( {'PassengerId': df2['PassengerId'], 'Transported': y_pred}, dtype={'Transported': str} ) combined_data.to_csv('predictions_logistic.csv', index=False)
方法2:通过CSV参数强制保留字符串格式
使用csv模块的引号参数,让Pandas将非数值型数据用引号包裹,从而保留原始字符串的大小写:
import csv combined_data.to_csv('predictions_logistic.csv', index=False, quoting=csv.QUOTE_NONNUMERIC)
方法3:优化数组处理逻辑(可选)
你原来的字节串-字符串转换步骤可以简化,直接生成目标字符串数组,减少类型混淆的可能:
import numpy as np # 直接将数值数组映射为目标字符串 y_pred = np.where(y_pred == 1, 'True', 'False') # 确保类型为字符串 y_pred = y_pred.astype(str)
内容的提问来源于stack exchange,提问作者Sumedh Kudale
相关产品推荐
相关产品推荐

