2014-12-09 2 views
0

У меня есть CSV-файл, как показано нижеПолучить заголовок: row_data из CSV файла питона

h1,h2,h3,h4 
a,b,,d 
1,2,3,4 
a1,,h5,jj 

Я хотел бы получить список вроде этого: Например, для «а», мне нужно h1:a,h2:b,h4:d. Я мог бы получить заголовки и данные строк отдельно, однако я не могу их конкатенировать желаемым образом. Кроме того, я не хочу, бланки должны быть напечатаны как «нан»

+0

Вы имеете в виду список словарей? – reptilicus

+0

@reptilicus Да. Но он должен печатать только для одного элемента h1, то есть a или 1 или a1. Я попробовал '{rows [0]: rows [1] для строк в reader}' для полного словаря, но результат выглядел ужасно. – abn

+0

df.to_dict ('records') может работать? – reptilicus

ответ

1

Что-то подобное может работать

import numpy as np 
import pandas 
df = pandas.read_csv('some_file') 
for row in df.to_dict('records'): 
    print {k:v for k,v in row.iteritems() if v is not np.nan} 
1

Вы можете легко сделать это с помощью CSV модуля и Dict постижений:

import csv 

with open('test.csv', 'r') as f:                                 
     reader = csv.reader(f)                                   
     result = []                                     
     header = reader.next()                                   
     for row in reader:                                    
      result.append({k: v for k, v in zip(header, row) if v != ''}) 
1

Вы также можете использовать мою библиотеку оболочки над модулем CSV, чтобы сделать это:

>>> import pyexcel as pe 
>>> s=pe.load("example.csv", name_columns_by_row=0) 
>>> records = s.to_records() 
>>> records 
[{'h2': u'b', 'h3': u'', 'h1': u'a', 'h4': u'd'}, {'h2': u'2', 'h3': u'3', 'h1': u'1', 'h4': u'4'}, {'h2': u'', 'h3': u'h5', 'h1': u'a1', 'h4': u'jj'}] 
>>> s.column['h1'] 
[u'a', u'1', u'a1'] 
>>> zip(s.column['h1'], records) 
[(u'a', {'h2': u'b', 'h3': u'', 'h1': u'a', 'h4': u'd'}), (u'1', {'h2': u'2', 'h3': u'3', 'h1': u'1', 'h4': u'4'}), (u'a1', {'h2': u'', 'h3': u'h5', 'h1': u'a1', 'h4': u'jj'})] 

Дополнительную документацию можно найти here

Смежные вопросы