由于连接数据帧,无法从重复的轴重新索引



我在我的项目中实现了实验环境。

该组件基于Scikit learn。

在这个组件中,我将给定的CSV读入pandas数据框架。之后,我选择了最好的特征,并将给定数据框的维度从100降至5。之后,我将删除的ID列添加到这个减少的数据框中,以备将来使用。该列通过降维过程被删除。

一切正常,直到我改变我的代码读取所有CSV文件并返回一个联合数据帧:

请查看下一个代码:读取所有CSV:

dataframes = []
from os import listdir
from os.path import isfile, join
files_names = [f for f in listdir(full_path_directory_files) if   isfile(join(full_path_directory_files, f))]
for file_name in files_names:
    full_path_file = full_path_directory_files + file_name
    data_frame = pd.read_csv(full_path_file, index_col=None, compression="infer")
dataframes.append(dataframe)

之后,我在数据帧

之间进行了连接
features_dataframe = pd.concat(dataframes, axis=0)

我也检查过了。我用shape =(200,100)创建了两个不同的数据框架连接后变成(400,100)

之后,数据帧被发送到以下方法:

 def _reduce_dimensions_by_num_of_features(self, features_dataframe, truth_dataframe, num_of_features):
    print("Create dataframe with the {0} best features".format(num_of_features))
## In those functions I got the ids and their class
    ids, id_series = self._create_ids_by_dataframe(features_dataframe)
    features_dataframe_truth_class = self._extract_truth_class_by_truth_dataframe(truth_dataframe, ids)

    k_best_classifier = SelectKBest(score_func=f_classif, k=num_of_features)
    k_best_features = k_best_classifier.fit_transform(features_dataframe, features_dataframe_truth_class)
    reduced_dataframe_column_names = self._get_k_best_feature_names(k_best_classifier, features_dataframe)

    reduced_dataframe = pd.DataFrame(k_best_features, columns=reduced_dataframe_column_names)

现在我检索ID列:

    reduced_dataframe["Id"] = id_series

软件在消息上出错:

ValueError: cannot reindex from a duplicate axis

这只发生在数据帧连接之后。

我如何将id列添加到数据框中而不出现错误?

我发现问题了:

数据帧连接后,索引被改变,当我们添加一行时:

reduced_dataframe["Id"] = id_series

我们得到一个错误。

解决方法是重置索引:

features_dataframe = pd.concat(dataframes, axis=0)
features_dataframe.reset_index(drop=True, inplace=True)

相关内容

  • 没有找到相关文章