如何使用CSV文件的唯一值在Python中创建列表?

Gra*_*y M 9 python csv list 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
Run Code Online (Sandbox Code Playgroud)

我想创建两个列表,

Category = [Category1, Category2, Category3]
Run Code Online (Sandbox Code Playgroud)

Year = [1994, 1995, 1996, 1998]
Run Code Online (Sandbox Code Playgroud)

我想省略列中的重复项.我正在阅读如下文件,

DataCaptured = csv.reader(DataFile, delimiter=',')  
DataCaptured.next()
Run Code Online (Sandbox Code Playgroud)

和循环,

   for Column in DataCaptured:
Run Code Online (Sandbox Code Playgroud)

daw*_*awg 10

你可以做:

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']
Run Code Online (Sandbox Code Playgroud)

如评论中所述,如果订单无关紧要,使用套装会更容易,更快捷:

Category, Year = set(), set()
for row in DataCaptured:
    Year.add(row[0])
    Category.add(row[1])
Run Code Online (Sandbox Code Playgroud)


CT *_*Zhu 7

一个非常简洁的方法是使用pandas,其好处是:它具有更快的CSV pharser; 它在列中工作(所以它只需要一个df.apply(set)让你到达那里):

In [244]:
#Suppose the CSV is named temp.csv
df=pd.read_csv('temp.csv',header=None)
df.apply(set)
Out[244]:
0                        set([1994, 1995, 1996, 1998])
1            set([ Category2,  Category3,  Category1])
2    set([ Something Happened 4,  Something Happene...
dtype: object
Run Code Online (Sandbox Code Playgroud)

缺点是它返回a pandas.Series,并且为了访问每个列表,你需要做类似的事情list(df.apply(set)[0]).

编辑

如果必须保留订单,也可以非常轻松地完成,例如:

for i, item in df.iteritems():
    print item.unique()
Run Code Online (Sandbox Code Playgroud)

item.unique()将返回numpy.arrays,而不是lists.