如何从 python 中的 pandas 数据帧加载 Weka 数据集

How to Load Weka data set from pandas dataframe in python

目前我正在将 pandas 数据框设置为 csv 并将其作为 weka 数据集从 CSV 加载器加载。 是否有一种机制可以直接将 pandas 数据帧加载到 weka 数据集中,而无需在

之间创建中间 CSV 文件
learn_df = pd.DataFrame.from_records([s.to_dict() for s in learnList])
header = ["reviewId","word","type","positive_sentiment","negative_sentiment","number_of_noun","sentence","hasNeg","overallSentiment","sentiment"]
learn_df.to_csv(helper.get_data_dir() + os.sep + "resultTest.csv", index=None, header=True,columns=header)
diabetes_file = helper.get_data_dir() + os.sep + "resultTest.csv"
helper.print_info("Loading dataset: " + diabetes_file)
loader = Loader("weka.core.converters.CSVLoader")

diabetes_data = loader.load_file(diabetes_file)
remove = Filter(classname="weka.filters.unsupervised.attribute.Remove", options=["-R", "1,2,7"])
remove.inputformat(diabetes_data)
filtered = remove.filter(diabetes_data)
//code to classify instances here

每次转换为 csv 并从 csv 加载以进行分类都会使其成为一个代价高昂的过程。有没有一种机制可以避免这种情况?

@Manish 您可以将 pandas 数据帧转换为列表或 numpy 矩阵,然后使用 weka 方法 create_instances_from_lists() 和 create_instances_from_matrices()。

有关详细信息,您可以在 http://fracpete.github.io/python-weka-wrapper/examples.html

查看 weka 示例

关于将最后一列设置为 nominal 类型而不是 numeric,如@Pedro Pablo Severin Honorato 的评论中所述,您可以使用 weka 过滤器。

相同的示例如下:

from weka.filters import Filter

num_to_nom = Filter(classname="weka.filters.unsupervised.attribute.StringToNominal", options=["-R", "last"])
num_to_nom.inputformat(data)      #data is the weka dataset whose last column is numeric.
newData=num_to_nom.filter(data)   #newData is the weka dataset whose last column is nominal.

希望对您有所帮助!