首页 > 解决方案 > Pandas 从一个数据帧中删除不在另一个数据帧索引中的列 - 错误 TypeError: unhashable type: 'numpy.ndarray'

问题描述

我想从数据帧(make_results 中的 df)中获取索引,并确保只有索引是其他两个数据帧(X_train、X_test)中的列。

但我目前收到错误:

TypeError:不可散列的类型:'numpy.ndarray'

这适用于列表中的多个数据框。

所以对于这些数据帧: Dataframes X_Train 和 T_test

我希望他们只有与这些索引匹配的列: 索引

# Remove variables with no relationship from the X_train and X_test data for each make
for X_train, X_test in zip([t[0] for t in makes_train_test_sets], 
                            [t[1] for t in makes_train_test_sets]):
    # Remove test and training data any insignificant variables
    X_train = X_train.filter(df.index.values for df in make_results)
    X_test = X_test.filter(df.index.values for df in make_results)

对于数据集 X_train 和 X_test,剩下的唯一列应该是那些在 make_results 中为 df.index.values 索引的列。

标签: pythonpandas

解决方案


如果我理解您想要正确执行的操作,那么您似乎使用filter了错误的方式。

如果您只是想知道如何过滤出作为另一个索引存在的数据框中的列,则需要使用:

X_train.filter(df.index)

如果要遍历可迭代对象中的所有数据帧并一一过滤:

for X_train, X_test in zip([t[0] for t in makes_train_test_sets], 
                            [t[1] for t in makes_train_test_sets]):
    for df in mask_results:
        X_train = X_train.filter(df.index)
        X_test = X_test.filter(df.index)

您还可以以前“获取”这些数据帧的所有索引并仅过滤一次:

index_set = set()
for df in mask_results:
    index_set = index_set.union(df.index)

for X_train, X_test in zip([t[0] for t in makes_train_test_sets], 
                            [t[1] for t in makes_train_test_sets]):
    X_train = X_train.filter(index_set)
    X_test = X_test.filter(index_set)

推荐阅读