python - 无法使用 scipy.arff.loadarff 加载 arff 数据集
问题描述
我正在尝试从https://cometa.ujaen.es/(例如https://cometa.ujaen.es/datasets/yahoo_arts)下载 arff 数据集,并使用scipy.arff.loadarff
.
但是,似乎 scipy 期望在标头之后有一种 csv 文件,并且无法解析绝大多数数据集。
前任。重现问题:
from scipy.arff import loadarff
import urllib
urllib.request.urlretrieve('https://cometa.ujaen.es/public/full/yahoo_arts.arff', 'yahoo_arts.arff')
ds = loadarff('yahoo_arts.arff')
(我遇到这种情况ValueError: could not convert string to float: '{8 1'
)。
这是预期的吗?(又名 scipy 实现不完全符合 arff 格式)你知道一些解决方法或一些手工解析功能吗?
感谢您提供有关此主题的任何帮助/建议。
解决方案
您可以用作解决方法:
import numpy as np
import pandas as pd
with open('yahoo_arts.arff', 'r') as fp:
file_content = fp.readlines()
def parse_row(line, len_row):
line = line.replace('{', '').replace('}', '')
row = np.zeros(len_row)
for data in line.split(','):
index, value = data.split()
row[int(index)] = float(value)
return row
columns = []
len_attr = len('@attribute')
# get the columns
for line in file_content:
if line.startswith('@attribute '):
col_name = line[len_attr:].split()[0]
columns.append(col_name)
rows = []
len_row = len(columns)
# get the rows
for line in file_content:
if line.startswith('{'):
rows.append(parse_row(line, len_row))
df = pd.DataFrame(data=rows, columns=columns)
df.head()
推荐阅读
- wordpress - 如何连接 wordpress install 和 cli docker
- python - 检查列表中的值是否与列匹配时出错
- r - 是否有在 R 中打印 PDF(到打印机)的功能?
- java - 在只是实例变量副本的方法中创建局部变量有什么好处?
- python - python中多个CSV的堆积条形图
- python - Pandas - 布尔值条件语句未在函数中拾取
- javascript - 当我在 Storybook 中渲染组件时,为什么我的导入显示为未定义?
- javascript - 您可以仅定位导航中的链接以使用 swupjs 进行转换吗?
- julia - Julia - 想要更快地制作子情节动画
- java - 从“启动屏幕”活动转换在回调中不起作用