pandas 尝试访问 Dataframe 的列时出现KeyError

anauzrmj  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(344)

我试图创建一个函数,它根据列表中的值从 Dataframe 中删除不需要的列,并通过将 Dataframe 中的一列移动到另一个 Dataframe 中,将剩余的列分离到两个不同的 Dataframe 中。
不需要的列在第一个for循环中被删除,如果Tkinter变量 variabletype 等于1,索引为 i 的列将从表中删除。当这些列被删除时,后面的列的索引似乎减少了1,为了确保我们不会因此而丢失任何列,我实现了 count 变量。如果在迭代过程中没有删除列,我们将把 variabletype 的第i个元素附加到一个局部变量 usedvartypes 中,我们将在第二个for循环中使用它。
第一个很好用,但是第二个总是给我同样的错误。它应该做的是使用 usedvartypes 的长度迭代剩余的列,如果 usedvartypes 中的第i个元素等于0,我们想把第i个列复制到一个新的 Dataframe 中,并把它从前一个 Dataframe 中删除。但是,每当我试图运行这个命令时,我在第i个索引处收到KeyError。我不明白为什么,我尝试访问Pandas Dataframe 的方式错误吗?

def createFinalDataframe():
    global data
    global finaldata_x
    global finaldata_y
    global variabletype    #each value represents a single column in the dataframe; equal to 0 (y) 1(unwanted) or 2(x)

    finaldata_x = data
    count = 0
    usedvartypes=[]

    for i in range(len(variabletype)):
        if (variabletype[i].get() == 1):
            finaldata_x = finaldata_x.drop(finaldata_x.columns[count], axis=1)
            count = count - 1
        else:
            usedvartypes.append(variabletype[i].get())
        count = count + 1

    for i in range(len(usedvartypes)):
        if (usedvartypes[i]==0):
            finaldata_y = []
            print(finaldata_x[i])
            finaldata_y= finaldata_x[i].copy()
            finaldata_x = finaldata_x.drop(finaldata_x.columns[i], axis=1)
            break
ej83mcc0

ej83mcc01#

在这里输入iloc。将print(finaldata_x[i])更改为print(finaldata_x.iloc[:, i])
更新逻辑:

def createFinalDataframe():
    global data, finaldata_x, finaldata_y, variabletype

    finaldata_x = data
    count = 0
    usedvartypes=[]

    for i in range(len(variabletype)):
        if (variabletype[i].get() == 1):
            finaldata_x = finaldata_x.drop(finaldata_x.columns[count], axis=1)
            count = count - 1
        else:
            usedvartypes.append(variabletype[i].get())
        count = count + 1

    for i in range(len(usedvartypes)):
        if (usedvartypes[i]==0):
            finaldata_y = []
            print(finaldata_x.iloc[:, i])
            finaldata_y= finaldata_x.iloc[:, i].copy()
            finaldata_x = finaldata_x.drop(finaldata_x.columns[i], axis=1)
            break

相关问题