根据多列标准从csv中仅提取唯一行?

时间:2010-04-09 20:49:44

标签: csv

基本上我在数据行之后有行

事件|场地|日期|一些|其他|列|这里|

在同一地点和日期发生了很多重叠事件。

所以我想通过匹配活动,地点,日期来结束唯一的活动。

这有可能在excel中,如何处理这个问题? VBA?还是我不知道的一些选择?

谢谢。

更新:

我刚刚访问数据 - >删除重复项

4 个答案:

答案 0 :(得分:1)

使用TxtSushi,您可以直接在CSV文件上运行Jerry的选择。所以:

tssql -table event_table events.csv \
'select event, venue, date 
    from event_table
    group by event, venue, date'

我将它宣传为* NIX工具,但它也适用于Windows。

答案 1 :(得分:0)

最简单的方法可能是将数据导入数据库。此时,SQL查询(例如)将类似于:

select event, venue, date 
    from event_table
    group by event, venue, date

无论您将其视为电子表格,Excel 都不是一个优秀的数据库管理器。

答案 2 :(得分:0)

如果您使用的是* nix,则可以使用awk

awk -F"|" '{a[$1$2$3]=$0}END{ for(i in a) print i,a[i]}' csv

答案 3 :(得分:0)

到目前为止很棒的答案。

学习脚本语言 任何脚本语言。

在Python中执行所需操作的一种方法:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv

def main():
    FIN = 'in.csv'
    with open(FIN, 'r') as fin:
        col_name_reader = csv.reader(fin)

        # assuming the first line of your csv file has column names
        col_names = col_name_reader.next()
        csv_dict_reader = csv.DictReader(fin, col_names)

        uniq_events = set(tuple((row['event'], row['venue'], row['date']) 
            for row in csv_dict_reader))

        print uniq_events

if __name__ == "__main__":
    main()

使用填充如下的测试文件:

event,venue,date
an_event,a_venue,2010-01-01
an_event,a_venue,2010-01-01
an_event,a_venue,2010-01-01
another_event,another_venue,2010-01-02
another_event,another_venue,2010-01-02

我们得到:

set([('an_event', 'a_venue', '2010-01-01'),
     ('another_event', 'another_venue', '2010-01-02')])

祝你好运!