从CSV文件python获取标题:row_data

时间:2014-12-09 21:22:06

标签: python csv numpy dictionary pandas

我有一个类似下面的csv文件

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

我希望得到一个这样的列表: 例如,对于' a',我需要h1:a,h2:b,h4:d。我可以单独获取标题和行数据,但是,我无法以所需的方式连接它们。此外,我不希望空白被打印为' nan'

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用csv模块和dict comprehensions轻松完成此操作:

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 != ''}) 

答案 2 :(得分: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