Mona Jalal
Mona Jalal

Reputation: 38255

ImportError: No module named arff

Here's a simple code as in this link to read an arff file in python (the commented one didn't work too):

import arff
for row in arff.load('heart_train.arff'):
        print(row.sex)  

And here's the error I receive:

python id3.py 
Traceback (most recent call last):
  File "id3.py", line 1, in <module>
    import arff
ImportError: No module named arff

"heart_train" arff file data is like:

@relation cleveland-14-heart-disease
@attribute 'age' real
@attribute 'sex' { female, male}
@attribute 'cp' { typ_angina, asympt, non_anginal, atyp_angina}
@attribute 'trestbps' real
@attribute 'chol' real
@attribute 'fbs' { t, f}
@attribute 'restecg' { left_vent_hyper, normal, st_t_wave_abnormality}
@attribute 'thalach' real
@attribute 'exang' { no, yes}
@attribute 'oldpeak' real
@attribute 'slope' { up, flat, down}
@attribute 'ca' real
@attribute 'thal' { fixed_defect, normal, reversable_defect}
@attribute 'class' { negative, positive}
@data
63,male,typ_angina,145,233,t,left_vent_hyper,150,no,2.3,down,0,fixed_defect,negative
37,male,non_anginal,130,250,f,normal,187,no,3.5,down,0,normal,negative
41,female,atyp_angina,130,204,f,left_vent_hyper,172,no,1.4,up,0,normal,negative
56,male,atyp_angina,120,236,f,normal,178,no,0.8,up,0,normal,negative
57,female,asympt,120,354,f,normal,163,yes,0.6,up,0,normal,negative
57,male,asympt,140,192,f,normal,148,no,0.4,flat,0,fixed_defect,negative
...

Upvotes: 10

Views: 9236

Answers (2)

James Sapam
James Sapam

Reputation: 16940

After I change your, arff file it works:

NB: I removed the single code from the second column of the attribute.

Here is the arff file:

@relation cleveland-14-heart-disease
@attribute age real
@attribute sex { female, male}
@attribute cp { typ_angina, asympt, non_anginal, atyp_angina}
@attribute trestbps real
@attribute chol real
@attribute fbs { t, f}
@attribute restecg { left_vent_hyper, normal, st_t_wave_abnormality}
@attribute thalach real
@attribute exang { no, yes}
@attribute oldpeak real
@attribute slope { up, flat, down}
@attribute ca real
@attribute thal { fixed_defect, normal, reversable_defect}
@attribute class { negative, positive}
@data
63,male,typ_angina,145,233,t,left_vent_hyper,150,no,2.3,down,0,fixed_defect,negative
37,male,non_anginal,130,250,f,normal,187,no,3.5,down,0,normal,negative
41,female,atyp_angina,130,204,f,left_vent_hyper,172,no,1.4,up,0,normal,negative
56,male,atyp_angina,120,236,f,normal,178,no,0.8,up,0,normal,negative
57,female,asympt,120,354,f,normal,163,yes,0.6,up,0,normal,negative
57,male,asympt,140,192,f,normal,148,no,0.4,flat,0,fixed_defect,negative

Snippet and output:

:/tmp:~ cat a.py
import arff
for row in arff.load('heart_train.arff'):
   print(row.sex)
:/tmp:~ python a.py
male
male
female
male
female
male
:/tmp:~
male
:/tmp:~

Upvotes: 2

ndpu
ndpu

Reputation: 22571

You should rename your script from arff.py to something different, arfftest.py for example. Python cant import arff module you need because name of it is the same as your app file name.

And if you havent installed arff package itself, install it with pip or easy_install:

pip install arff
# or easy_install arff
# or pypm install arff

Upvotes: 15

Related Questions