import pandas as pd
defread_sparse_arrf(file):withopen(file, encoding="utf-8")as f:
header =[]
default_field ={}
field_num =0for line in f:if line.startswith("@attribute")or line.startswith("@ATTRIBUTE"):
_, name, field_type = line.split()
header.append(name)if field_type.startswith("{"):
default_field[field_num]= field_type[1:-1].split(",")[0]
field_num +=1elif line.startswith("@data")or line.startswith("@DATA"):break
default_field_keys =set(default_field.keys())
width =len(header)
data =[]for line in f:
line = line.strip()ifnot line:continue
tmp =[0]*width
flags =set()for kv in line[1:-1].split(","):
k, v = kv.split()
k =int(k)if k notin default_field_keys:
v =int(v)
flags.add(k)
tmp[k]= v
for k in default_field_keys-flags:
tmp[k]= default_field[k]
data.append(tmp)return pd.DataFrame(data, columns=header)