首页 > 解决方案 > python中的dtype混淆。遇到不同 dtype 的错误时该怎么办

问题描述

在 python 中运行我的代码时遇到问题。它在 python 3.6 中运行良好,但在升级到 python 3.7 后,代码不再工作。

我们已经将许多 excelfiles 作为数据帧读入 python,我们必须计算 5 列作为加权平均值。

我们尝试了不同的 dtype 设置,但没有成功,但不知道如何正确使用它们。我们试图从 int 转换为 float 但没有成功。

我们有以下代码

  1. 我们有一个包含数字和字符串的数据框
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 56 entries, 0 to 55
Data columns (total 25 columns):
(Course, Coursenummer)                                                                                                                     56 non-null int64
(Course, Coursenavn)                                                                                                                       56 non-null object
(Course, Semester)                                                                                                                         56 non-null object
(Course, Antal personer som kunne besvare dette evalueringsskema)                                                                          56 non-null int64
(Course, Antal personer som har besvare dette evalueringsskema)                                                                            56 non-null int64
(Course, Antal personer som har tilkendegivet ikke at have fulgt kurset)                                                                   56 non-null int64
(Course, Svarprocent)                                                                                                                      56 non-null int64
(1 Har du fået den afsluttende karakter?, Indgår(1))                                                                                       56 non-null object
(1 Har du fået den afsluttende karakter?, Ja)                                                                                              56 non-null int64
(1 Har du fået den afsluttende karakter?, Nej)                                                                                             56 non-null int64
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), Indgår(2))        56 non-null object
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), Helt enig)        56 non-null int64
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), [Blank B] (2))    56 non-null int64
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), [Blank C] (2))    56 non-null int64
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), [Blank D] (2))    56 non-null int64
(2 Jeg synes, at eksamen stemte overens med undervisningen på kurset (formen, aktiviteterne, indholdet, sværhedsgraden), Helt uenig)       56 non-null int64
(3 Begrundelse / kommentarer:, Indgår(3))                                                                                                  56 non-null object
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], Indgår(4))                                      56 non-null object
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], Helt enig(4))                                   56 non-null int64
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], [Blank B] (4))                                  56 non-null int64
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], [Blank C] (4))                                  56 non-null int64
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], [Blank D] (4))                                  56 non-null int64
(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål.
[Se læringsmål], Helt uenig(4))                                  56 non-null int64
(5 Begrundelse / kommentarer:, Indgår(5))                                                                                                  56 non-null object
(6 Øvrige kommentarer / forslag til forbedringer af eksamen i dette kursus:, Indgår(6))                                                    56 non-null object
dtypes: int64(17), object(8)
memory usage: 11.0+ KB

当我们试图将一组列相乘时会出错

def computeColumn(df, offset):
    col = np.zeros(df.shape[0],dtype=int)
    for i in range(5):
        col+=df.iloc[:,offset+i]*int(5-i)

    col/=df.iloc[:,offset:offset+5].sum(axis=1)

    return col

我们收到以下错误:

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

我们期望计算从 1-5 的列

标签: pythonpandas

解决方案


我认为您需要将该(4 Jeg synes, at eksamens form og indhold passede til kursets læringsmål. [Se læringsmål], Indgår(4))列转换为 int64(它当前是 object 类型),就像 DataFrame 中的一些类似列一样。

pd.to_numeric(df.feature_name)

推荐阅读