简体   繁体   中英

How do I read specific rows AND columns in CSV file while printing values within a certain range

Hi I am having some problems looking at specific rows and columns in an csv file.

My current goal is look 3 different columns out the several that are there. And on top of that, I want to look at the data values (ex. 0.26) and sort through the ones that are betweeen 0.21 and 0.31 in a specific column. My issue is that I dont know how to do both of those at the same time. I keep getting errors that tell me i cant use '<=' with float and str.

Heres my code:

    import csv
    from collections import defaultdict

    columns = defaultdict(list) # each value in each column is appended to a list

    with open('C:\\Users\\AdamStoer\\Documents\\practicedata.csv') as f:
    reader = csv.DictReader(f,delimiter=',') # read rows into a dictionary format
    for row in reader:
        for columns['pitch'] in row:
            for v in columns['pitch']:
                p=float(v)
                if p <= 0.5:
                    columns['pitch'].append(v)
    print(columns['pitch'])

This code was working before for the last part

for row in reader: # read a row as {column1: value1, column2: value2,...}
    for (k,v) in row.items(): # go over each column name and value 
        columns[k].append(v) # append the value into the appropriate list
                             # based on column name k
print(columns['pitch'])

Looks like you're confusing a couple things. If you know the specific column you want (pitch) you do not have to loop over all the columns in each row. You can access it directly like so:

for row in reader:
    p = float(row['pitch'])
    if p <= 0.5:
        print p

It's hard for me to tell what output you want, but here's an example that looks at just the pitch in each row and if it is a match appends all the target values for that row to the columns dictionary.

targets = ('pitch', 'roll', 'yaw')
columns = defaultdict(list)

for row in reader:
    p = float(row['pitch'])
    if p >= 0.21 and p <= 0.31:
        for target in targets:
            column[target].append(row[target])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM