首页 > 解决方案 > 我正在尝试将函数应用于 DataFrame 的列,但得到签名匹配的循环错误

问题描述

您好我正在尝试运行以下代码:

def f(df):
    new = pd.Series(df)

    i = new.str.lower() \
        .str.replace('[^a-z\s]', '') \
        .str.split(expand=True) \
        .stack()

    # generate bigrams by concatenating unigram columns
    j = i + ' ' + i.shift(-1)
    digrams = []
    for k in j[:]:
        k=str(k)
        k = k.split(" ")
        s = "_".join(k)
        digrams.append(s)

    return pd.Series(digrams)

df = pd.read_csv("labeled_new.csv")

#vectorize documents
df["abstract_text_x"]=df["abstract_text_x"].apply(f)

所以 df 是一个具有多列和多行的 DataFrame,我试图将函数 f 仅应用于数据帧的 abstract_text_x 列。此列包含一个字符串格式的文本。函数 f 将创建二元组并用“_”连接单词。该函数有效,问题是当我试图将 f 的结果返回到数据帧时。我收到以下错误:

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

这意味着什么?我该如何解决?

标签: pythonpython-3.xpandas

解决方案


当您的代码需要整数类型但接收到字符串或其他内容时,就会出现该错误。尝试将 str() 类型转换添加到变量 s 时,将其附加到 digrams。还要确保“abstract_text_x”的数据类型是字符串,而不是对象或数组。基本上,只需遍历您的数据并检查您的数据类型,您就会发现一些不匹配的内容。


推荐阅读