pandas读取CSV打印时出现ufunc 'add'类型不匹配错误咨询
报错具体含义
该报错是NumPy底层通用计算函数抛出的类型匹配错误:执行加法(add)操作时,两个参与运算的操作数类型分别是长度为19的Unicode字符串类型(dtype('<U19'))和64位整数类型(dtype('int64')),NumPy没有预置这两种类型直接做加法运算的实现逻辑,因此运算中断抛出错误。
其中dtype('<U19')对应的就是代码里通过strftime("%Y-%m-%d %H:%M:%S")生成的固定长度时间字符串,和格式长度完全匹配。
触发原因
- 报错和
pd.read_csv读取CSV文件的逻辑无关,文件读取流程已经正常执行完成,问题出在读取完成后的打印逻辑。 - 出错代码为
print(now.strftime("%Y-%m-%d %H:%M:%S") + df_short):Python中+运算符用于字符串拼接时,要求两侧操作数均为字符串类型,直接将字符串和pandas DataFrame对象做+运算时,pandas会将该操作广播到DataFrame的每一个元素,逐元素执行加法。 - 截取的CSV前5行数据(
df_short)中存在存储为int64类型的整数列,字符串和整数无法直接通过+拼接,触发类型不匹配报错。
修复方法
选择任意一种修改方式即可解决问题:
- 方法1:将DataFrame作为print的独立参数传入,不需要手动做字符串拼接,print会自动将所有传入参数转为字符串后输出,修改后的对应代码行为:
print(now.strftime("%Y-%m-%d %H:%M:%S"), df_short)
- 方法2:如果需要严格控制拼接格式,先将DataFrame显式转换为字符串格式后再做拼接,修改后的对应代码行为:
print(now.strftime("%Y-%m-%d %H:%M:%S") + '\n' + df_short.to_string())
内容的提问来源于stack exchange,提问作者Zuffido
相关产品推荐
相关产品推荐

