Python绘制直方图时“UFuncTypeError: ufunc ‘add‘ did not contain a loop with signature matching types “报错解决

问题原因:就是因为函数代码中与文件地址相关的字符串定义中出现了字符串与Series相加的情况,导致了该问题的出现,可以通过发现并规避这种情况让这种报错消失

情况简述
当我们在进行单变量统计时,最常用的图标就是直方图,而由于需要对多个文件分别进行绘图可视化,因此,想到使用定义函数来简化工作量,而这里 要介绍的问题就是我在完成这个任务过程中发现的;
报错的具体信息:
numpy.core._exceptions.UFuncTypeError: ufunc ‘add’ did not contain a loop with signature matching types (dtype(’<U32’), dtype(’<U32’)) -> dtype(’<U32’)
虽然,在maomaona编写的有关问题解释中有对该问题的说明,但是我在此发现的问题可能更加隐晦,不易察觉
为了打开文件方便,便于使用遍历进行多文件操作,我对打开文件定义了函数:

def open(file_name):
    file_path='c:\\Users\\dell\\Desktop\\'+file_name+'.csv'
    df=pd.read_csv(file_path)
    return df

同样的原因,也对绘制直方图的功能定义了函数:

def hist_plt(df,type):
    hist,ax=plt.subplots()
    ax=sns.distplot(df)
    ax.set_title('Histogram of '+df+' by '+device_type)
    ax.set_xlabel(df)
    ax.set_ylabel('Frequency')
    plt.savefig('c:\\Users\\dell\\Desktop\\'+df+'_'+device_type+'.png')
    plt.show() 

主函数使用:

if __name__ == '__main__':
    df=open('A1')
    print(df.info())
    hist_plt(df['column'],'A1')

运行代码,发现很长的报错信息,看着无法明白的信息,心里不是滋味
在这里插入图片描述
当我了解到出现这种问题的主要原因是数据类型不匹配时,我也在想自己的代码问题出在哪里?因为我也按照info()方法对我自己调用的列表进行了数据类型的查看,发现类型应该是相同的
在这里插入图片描述
但是代码不能工作是事实,并且本身代码中存在不理想的部分,即df是Series,但是我需要绘制的图的横坐标需要的是列索引名,因此,在调试过程中发现了问题所在,即在绘图函数中有关字符串的定义部分存在类型不匹配的数据相加的情况,即

def hist_plt(df,type):
    hist,ax=plt.subplots()
    ax=sns.distplot(df)
    ax.set_title('Histogram of '+df+' by '+device_type)
    #df是Series,并不是字符串,以下字符串相连均存在相同的问题;
    ax.set_xlabel(df)
    ax.set_ylabel('Frequency')
    plt.savefig('c:\\Users\\dell\\Desktop\\'+df+'_'+device_type+'.png')
    plt.show() 

因此我就考虑使用str()方法将df强制转换为字符串,但是转换后发现了新的报错信息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
在这里插入图片描述
KeyError: "None of [Float64Index([
在这里插入图片描述
因此,我发现了原来str()方法在这里是将整个Series都转换为str再以列表的形式传入,导致出现了不理想的情况;因此,我意识到这里其实我定义函数的参数应该都定义为字符串更加易用,因此,修改后的代码如下:

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns
from numpy import nan as NA 

def open(file_name):
    file_path='c:\\Users\\dell\\Desktop\\'+file_name+'_pass.csv'
    df=pd.read_csv(file_path)
    return df
def hist_plt(column,type):
    hist,ax=plt.subplots()
    ax=sns.distplot(df[column])
    ax.set_title('Histogram of '+column+' by '+type)
    ax.set_xlabel(column)
    ax.set_ylabel('Frequency')
    plt.savefig('c:\\Users\\dell\\Desktop\\'+column+'_'+device_type+'.png')
    plt.show() 
if __name__ == '__main__':
    
    df=open('A')
    hist_plt('column','A')

修改后的代码顺利的解决了问题,并且绘制出理想的图线
在这里插入图片描述
以上就是针对UFuncTypeError: ufunc ‘add’ did not contain a loop with signature matching types "报错解决

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Pydaty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值