我有一个类似下面的csv文件
h1,h2,h3,h4
a,b,,d
1,2,3,4
a1,,h5,jj
我希望得到一个这样的列表:
例如,对于' a',我需要h1:a,h2:b,h4:d
。我可以单独获取标题和行数据,但是,我无法以所需的方式连接它们。此外,我不希望空白被打印为' nan'
答案 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