问题原因:就是因为函数代码中与文件地址相关的字符串定义中出现了字符串与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')

运行代码,发现很长的报错信息,看着无法明白的信息,心里不是滋味

python 报错no option error python 报错is not trusted_python


当我了解到出现这种问题的主要原因是数据类型不匹配时,我也在想自己的代码问题出在哪里?因为我也按照info()方法对我自己调用的列表进行了数据类型的查看,发现类型应该是相同的

python 报错no option error python 报错is not trusted_python_02


但是代码不能工作是事实,并且本身代码中存在不理想的部分,即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().

python 报错no option error python 报错is not trusted_python_03


KeyError: "None of [Float64Index([

python 报错no option error python 报错is not trusted_打开文件_04


因此,我发现了原来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')

修改后的代码顺利的解决了问题,并且绘制出理想的图线

python 报错no option error python 报错is not trusted_python_05


以上就是针对UFuncTypeError: ufunc ‘add’ did not contain a loop with signature matching types "报错解决