gpt4 book ai didi

python - 所有 csv 列之间通用

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:45 25 4
gpt4 key购买 nike

我有一个 csv 文件。

table1    table2    table3  table4   table5
paper paper pen book book
pen pencil pencil charger apple
apple pen charger beatroot sandle
beatroot mobile apple pen paper
sandle book paper paper

我需要在所有列中找到相似的条目。在这种情况下,输出将是:

paper

列可能会增加或减少。

对于 2 列的相似性可以使用:

# reading csv file and converting it to dictionary
with open(input_file, 'r') as csvin:
reader=csv.DictReader(csvin)
data={k.strip():[v] for k,v in reader.next().items()}
for line in reader:
for k,v in line.items():
k=k.strip()
data[k].append(v)

# iterating the dictionary for each 2 columns
for a, b in itertools.combinations(data, 2):
# to get common species names
common = set(data[a]) & set(data[b])

但是,我不明白如何从所有列中获取相似的值。

最佳答案

您可以使用 csv.readerskipinitialspace=True要跳过空格,然后压缩行以获得列,我们使用 itertools.izip_longest因为最后一列中的值丢失了。转换集合中的列并使用 set.intersection 取交集:

from itertools import izip_longest
import csv

with open('test') as f:
reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
cols = map(set, izip_longest(*reader))

print set.intersection(*cols)

请注意,您的文件不是正确的 csv,如果您在不是最后一列的列中缺少值,这将无法正确解释您的输入。至少考虑使用非空格的分隔符。

例子

使用 StringIO解析字符串并显示它适用于测试用例:

from itertools import izip_longest
import csv
import StringIO

data='''table1 table2 table3 table4 table5
paper paper pen book book
pen pencil pencil charger apple
apple pen charger beatroot sandle
beatroot mobile apple pen paper
sandle book paper paper'''

f = StringIO.StringIO(data)
reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
cols = map(set, izip_longest(*reader))

print set.intersection(*cols)

输出

set(['paper'])

关于python - 所有 csv 列之间通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com