将数据帧导出到 arff 文件 python
exporting dataframe to arff file python
我正在尝试将 pandas 数据帧导出到 .arff 文件以在 Weka 中使用它。我已经看到模块 liac-arff can be used for that purpose. Going on the documentation here 似乎我必须使用
arff.dump(obj,fp)
虽然,我正在努力处理 obj (字典)我猜我必须自己创建它。你如何建议我正确地做到这一点?在一个大数据集(3 000 000 行和 95 列)中,是否有任何示例可以提供给我使用 python (v 2.7) 从 pandas 数据帧导出到 .arff 文件?
首先安装包:
$ pip install arff
然后在Python中使用:
import arff
arff.dump('filename.arff'
, df.values
, relation='relation name'
, names=df.columns)
其中 df
的类型为 pandas.DataFrame
。瞧。
这就是我最近使用软件包 liac-arff 完成的方法。即使 arff 包更易于使用,它也不允许定义列类型和分类属性的值。
df = pd.DataFrame(...)
attributes = [(c, 'NUMERIC') for c in df.columns.values[:-1]]
attributes += [('target', df[t].unique().astype(str).tolist())]
t = df.columns[-1]
data = [df.loc[i].values[:-1].tolist() + [df[t].loc[i]] for i in range(df.shape[0])]
arff_dic = {
'attributes': attributes,
'data': data,
'relation': 'myRel',
'description': ''
}
with open("myfile.arff", "w", encoding="utf8") as f:
arff.dump(arff_dic, f)
target 等分类属性的值必须是 str 类型,如果是数字则为 event。
受@M的回答启发。富兰克林,效果不是很好,但想法就在那里。
import arff
input // your DataFrame.
attributes = [(j, 'NUMERIC') if input[j].dtypes in ['int64', 'float64'] else (j, input[j].unique().astype(str).tolist()) for j in input]
arff_dic = {
'attributes': attributes,
'data': input.values,
'relation': 'myRel',
'description': ''
}
with open("myfile.arff", "w", encoding="utf8") as f:
arff.dump(arff_dic, f)
按照上面的代码片段,它会输出一个具有所需格式的 arff 文件。祝大家好运!
我正在尝试将 pandas 数据帧导出到 .arff 文件以在 Weka 中使用它。我已经看到模块 liac-arff can be used for that purpose. Going on the documentation here 似乎我必须使用
arff.dump(obj,fp)
虽然,我正在努力处理 obj (字典)我猜我必须自己创建它。你如何建议我正确地做到这一点?在一个大数据集(3 000 000 行和 95 列)中,是否有任何示例可以提供给我使用 python (v 2.7) 从 pandas 数据帧导出到 .arff 文件?
首先安装包:
$ pip install arff
然后在Python中使用:
import arff
arff.dump('filename.arff'
, df.values
, relation='relation name'
, names=df.columns)
其中 df
的类型为 pandas.DataFrame
。瞧。
这就是我最近使用软件包 liac-arff 完成的方法。即使 arff 包更易于使用,它也不允许定义列类型和分类属性的值。
df = pd.DataFrame(...)
attributes = [(c, 'NUMERIC') for c in df.columns.values[:-1]]
attributes += [('target', df[t].unique().astype(str).tolist())]
t = df.columns[-1]
data = [df.loc[i].values[:-1].tolist() + [df[t].loc[i]] for i in range(df.shape[0])]
arff_dic = {
'attributes': attributes,
'data': data,
'relation': 'myRel',
'description': ''
}
with open("myfile.arff", "w", encoding="utf8") as f:
arff.dump(arff_dic, f)
target 等分类属性的值必须是 str 类型,如果是数字则为 event。
受@M的回答启发。富兰克林,效果不是很好,但想法就在那里。
import arff
input // your DataFrame.
attributes = [(j, 'NUMERIC') if input[j].dtypes in ['int64', 'float64'] else (j, input[j].unique().astype(str).tolist()) for j in input]
arff_dic = {
'attributes': attributes,
'data': input.values,
'relation': 'myRel',
'description': ''
}
with open("myfile.arff", "w", encoding="utf8") as f:
arff.dump(arff_dic, f)
按照上面的代码片段,它会输出一个具有所需格式的 arff 文件。祝大家好运!