我在文件中有大量的记录。
Filename Col1 Col2 Col3 Col4
SE01_inf name [] NA []
SE01_loc NA loc NA []
SE01_id NA [] 123 []
SE01_1_inf name1 [] NA []
SE01_1_loc NA loc NA []
我想要一个合并的输出,如下所示
Filename Col1 Col2 Col3 Col4
SE01 name loc 123 []
SE01_1 name1 loc NA []
我不想在excel中这样做,因为数据量很大,而且当我编写函数时,excel会卡住。我可以使用python实现这一点,我不太清楚如何开始。
答案 0 :(得分:2)
数据有多大?如果内存不是问题,并且您在列表中有数据,这适用于您的示例输入:
input = [['SE01_inf', 'name', [], 'NA', []],\
['SE01_loc', 'NA', 'loc', 'NA', []],\
['SE01_id', 'NA', [], '123', []],\
['SE01_1_inf', 'name1', [], 'NA', []],\
['SE01_1_loc', 'NA', 'loc', 'NA', []]]
output = {}
for row in input:
id = row[0][:row[0].rfind('_')]
if id not in output:
output[id] = [id] + row[1:]
else:
output[id] = [new if old in ('NA', []) else old for new, old in zip(row, output[id])]
print output.values()
产生输出:
[['SE01', 'name', 'loc', '123', []], ['SE01_1', 'name1', 'loc', 'NA', []]]
答案 1 :(得分:1)
如果你有
input = [['name', '[]', 'NA', '[]'],\
['NA', 'loc', 'NA', '[]'],\
['NA', '[]', '123', '[]']]
你可以尝试
def fil(l):
tl = filter(lambda x:x not in ('NA','[]'), l)
if len(tl) == 0:
tl = [l[-1]]
t = str(*tl)
return t
output = map(fil, zip(*input))
输出将是:
['name', 'loc', '123', '[]']