1

I am having some issues parsing a csv file with 14 columns.

for row in training_set_data:
    if skiprow:
            skiprow = False
    else:
            for r in range(len(row)):
                    row[r] = float(row[r])
            training_set.append(row)

this seems to be working to just get a list of the vectors, but the next thing I want to do is collect the first 13 entries in each row and make one set of vectors, and then collect the last column and make a separate set of vectors of that. My code currently looks like this for the 13 entry vectors:

def inputVector(inputs):
    for r in inputs:
        inputs.pop(13)
    return inputs

This is not working and when I go to print it, it is still 14 entries long. Can anyone tell me what I am doing wrong? Sorry if the question doesn't make too much sense, I am pretty new to coding.

Edit: First 11 lines of the csv file and the call to input vecto

53,1,3,130,197,1,2,152,0,1.2,3,0,3,0
42,1,4,136,315,0,0,125,1,1.8,2,0,6,1
46,1,4,140,311,0,0,120,1,1.8,2,2,7,1
42,1,4,140,226,0,0,178,0,0,1,0,3,0
54,1,4,140,239,0,0,160,0,1.2,1,0,3,0
67,0,3,115,564,0,2,160,0,1.6,2,0,7,0
65,0,3,140,417,1,2,157,0,0.8,1,1,3,0
56,0,4,134,409,0,2,150,1,1.9,2,2,7,1
65,0,3,160,360,0,2,151,0,0.8,1,0,3,0
57,0,4,120,354,0,0,163,1,0.6,1,0,3,0
55,0,4,180,327,0,1,117,1,3.4,2,0,3,1

inputV = inputVector(training_set)
3
  • 2
    can you include the csv data in your question, and show where inputVector is called and how it relates to training_set? Commented Feb 19, 2014 at 1:22
  • added... (right now I am calling just to check if Im parsing correctly) Commented Feb 19, 2014 at 1:28
  • As an aside check out the built in library docs.python.org/2/library/csv.html Commented Feb 19, 2014 at 1:29

2 Answers 2

2

The problem is this code:

def inputVector(inputs):
    for r in inputs:
        inputs.pop(13)
    return inputs

You're iterating over all inputs, and removing elements from inputs rather than from r. To remove element 13 from each row, do this instead:

def inputVector(inputs):
    for r in inputs:
        r.pop(13)  # <-- replaced inputs with r
    return inputs
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I have now wasted too much time :p
2

Try something like this:

first_13s = []
last_1s = []

for r in inputs:
    first_13s.append(r[:13])
    last_1s.append(r[13])

also you can replace a number of lines in your first block of code just by using training_set_data[1:]

python list slicing is very handy Explain Python's slice notation

also you can use list comprehensions for your float conversion:

for r in range(len(row)):
    row[r] = float(row[r])

becomes

row = [float(r) for r in row]

so the first block can be done like this:

for row in training_set_data[1:]:
    row = [float(r) for r in row]
    training_set.append(row)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.