2016-12-15 2 views
0

Эй Я пытаюсь создать словарь, используя встроенный модуль csv в python. По сути, это файл excel с именем weather.csv, где ключ словаря строки является заголовком столбца, а значением является значение из этой строки. Я застрял, потому что я не могу заставить код запускать несколько столбцов для создания двух словарей одновременно. Кроме того, я получаю ключевую ошибку, когда он говорит print row ['col_list'], который я не понимаю, почему это происходит. Col_list - это заголовки для каждой строки. Вот мой код:Использование строк и столбцов csv python

import csv 
def read_file(filename, col_list): 
    filename = 'weather.csv' 
    with open('weather.csv', 'r') as f: 
     reader = csv.DictReader(f)  
     for row in reader:    
      print row['col_list'] 

Это то, что я хотел бы, чтобы мой результат был. Я думаю, что это довольно просто, чего мне не хватает, но мне сложно понять это.

print read_file('weather.csv', ['TemperatureF', 'VisibilityMPH']) 
{'TemperatureF': [30.9, 32.0, 32.0, 32.0, 32.0, 30.9 ...], 
'VisibilityMPH': [10.0, 10.0, 10.0, 10.0, 4.0, 2.5 ...]} 
+0

Это похоже на хорошую пригодность для 'pandas'. Попробуйте импортировать CSV с помощью 'pandas.read_csv', а затем преобразуйте его в словарь с помощью' pandas.DataFrame.to_dict() ' – Jakub

+0

. Некоторые примерные входные данные сделают любой предложенный ответ намного проще для тестирования. –

ответ

1

Как насчет создания словаря с ключами для каждого заголовка столбца и списка для всех значений, содержащихся в этом столбце? Например:

import csv 

def read_file(filename, col_list, data={}): 

    with open('weather.csv', 'r') as f: 

     reader = csv.DictReader(f)  
     for num, row in enumerate(reader): 
      if num == 0: continue # skip if it's the first row, which has the headings 
      for col in col_list: 
       if not data.get(col): data[col] = list() 
       data[col].append(row[col]) 

    return data 
+0

Большое вам спасибо – Suzaku

0

Если вы можете использовать pandas, я думаю, было бы лучше подходят для этой задачи, чем csv модуля.

import pandas as pd 
df = pd.read_csv(filename, names=col_list) 
dict_ = df.to_dict() 
Смежные вопросы