如何使用CSV文件的唯一值在Python中创建列表?
我的CSV文件如下所示如何使用CSV文件的唯一值在Python中创建列表?,python,list,csv,unique,Python,List,Csv,Unique,我的CSV文件如下所示 1994, Category1, Something Happened 1 1994, Category2, Something Happened 2 1995, Category1, Something Happened 3 1996, Category3, Something Happened 4 1998, Category2, Something Happened 5 DataCaptured = csv.reader(DataFile, delimiter='
1994, Category1, Something Happened 1
1994, Category2, Something Happened 2
1995, Category1, Something Happened 3
1996, Category3, Something Happened 4
1998, Category2, Something Happened 5
DataCaptured = csv.reader(DataFile, delimiter=',')
DataCaptured.next()
我想创建两个列表
Category = [Category1, Category2, Category3]
及
我想省略这列中的重复项。我正在阅读以下文件:
1994, Category1, Something Happened 1
1994, Category2, Something Happened 2
1995, Category1, Something Happened 3
1996, Category3, Something Happened 4
1998, Category2, Something Happened 5
DataCaptured = csv.reader(DataFile, delimiter=',')
DataCaptured.next()
循环通过,
for Column in DataCaptured:
你可以做:
DataCaptured = csv.reader(DataFile, delimiter=',', skipinitialspace=True)
Category, Year = [], []
for row in DataCaptured:
if row[0] not in Year:
Year.append(row[0])
if row[1] not in Category:
Category.append(row[1])
print Category, Year
# ['Category1', 'Category2', 'Category3'] ['1994', '1995', '1996', '1998']
如评论中所述,如果顺序不重要,使用集合将更容易、更快:
Category, Year = set(), set()
for row in DataCaptured:
Year.add(row[0])
Category.add(row[1])
一种非常简洁的方法是使用
pandas
,其好处是:它有一个更快的CSV服务器;并且它可以在列中工作(因此只需要一个df.apply(set)
就可以到达那里):
缺点是它返回一个pandas.Series
,要访问每个列表,需要执行类似list(df.apply(set)[0])
的操作
编辑
如果必须保留订单,也可以很容易地完成,例如:
for i, item in df.iteritems():
print item.unique()
item.unique()
将返回numpy.array
s,而不是list
s。dawg
指出了Python中最伟大的技巧之一:使用set()
从列表中删除重复项dawg
展示了如何通过将每个项目添加到集合
,从头开始构建唯一列表,这非常完美。但这里有另一种等效方法,使用list(set())
方法生成包含重复项的列表和不包含重复项的列表:
import csv
in_str = [
'year, category, event',
'1994, Category1, Something Happened 1',
'1994, Category2, Something Happened 2',
'1995, Category1, Something Happened 3',
'1996, Category3, Something Happened 4',
'1998, Category2, Something Happened 5'
]
cdr = csv.DictReader(in_str, skipinitialspace=True)
col = []
for i in cdr:
col.append(i['category'])
# all items in the column...
print(col)
# only unique items in the column...
print(list(set(col)))
类别
和年份
之间是否存在任何关系?@dawg否。它们不相关。那一年发生的只是随机事件。