【问题标题】:Unique elements in columns in csv file using python使用python的csv文件中列中的唯一元素
【发布时间】:2019-04-02 12:46:58
【问题描述】:

我有一个分号分隔的 csv 文件,格式如下:

indx1; string1; char1; entry1 
indx2; string1; char2; entry2 
indx3; string2; char2; entry3 
indx4; string1; char1; entry4 
indx5; string3; char2; entry5 

我想以列表的形式(不使用 pandas 或 numpy)获取此文件第一列和第二列的唯一条目。特别是这些是我想要的列表:

[string1, string2, string3] 
[char1, char2]

顺序无所谓,希望操作快点。

目前,我正在使用命令读取文件(比如“data.csv”)

with open('data.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=';')

我正在使用 python 2.7。实现我想要的功能的最快方法是什么?我将不胜感激。

【问题讨论】:

标签: python python-2.7 csv


【解决方案1】:

您可以使用sets 来跟踪所需列中已经看到的值。既然您说顺序无关紧要,您可以在处理完所有行后将集合转换为列表:

import csv

col1, col2 = set(), set()

with open('data.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=';', skipinitialspace=True)        
    for row in csv_reader:
        col1.add(row[1])
        col2.add(row[2])

print list(col1), list(col2)  # ['string1', 'string3', 'string2'] ['char2', 'char1']

【讨论】:

  • 感谢尤金,这真的很有帮助!你的解决方案奏效了。 =)
  • 我们可以按顺序打印它们吗@Eugene Yarmash?
  • @AlbionShala “按顺序打印”是什么意思?
  • @EugeneYarmash 我的意思是像 string1 string2 string3 一样打印,就像它们在 CSV 中的方式一样
【解决方案2】:

这应该可行。您可以将其用作基准。

myDict1 = {}
myDict2 = {}
with open('data.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=';')
    for row in csv_reader:
        myDict1[row[1]] = 0
        myDict2[row[2]] = 0

x = myDict1.keys() 
y = myDict2.keys() 

【讨论】:

  • 感谢 jimifiki,您的解决方案非常有帮助。有效。 =)
  • 嗨@jimifiki,我得到像dict_keys(['blla1','blla2']) 这样的输出有没有办法只打印没有dict_keys 的键所以只打印['blla1','blla2']
  • 确定 @AlbionShala list(myDict.keys()) 从 dict_keys 构造一个列表。所以我会写print(list(myDict.keys())),这应该没问题。玩转 Python 的数据结构 ;-)
  • 实际上以这种方式打印所有这些,因此不仅有唯一键。我所做的只是在您之前的示例中遍历x,所以for y in x ... print(y)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多