为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用python获取仅在csv文件的第一列中出现一次的值

如何使用python获取仅在csv文件的第一列中出现一次的值

繁花如伊 2021-12-17 16:49:59
我是 python 新手,所以我试图读取包含标题的 700 行的 csv,并获取包含第一个 csv 列的唯一值的列表。示例 CSV:SKU;PRICE;SUPPLIERX100;100;ABCX100;120;ADDX101;110;ABVX102;100;ABCX102;105;ABVX100;119;ABG所以我做了以下事情:import csvmainlist=[]with open('final_csv.csv', 'r', encoding='utf-8') as csvf:    rows = csv.reader(csvf, delimiter=";")    for row in rows:        if row[0] not in rows:            mainlist.append(row[0])print(mainlist)我注意到在调试中,行是 1 行而不是 700 行,我只得到['SKU'] 字段我做错了什么?
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

使用熊猫的解决方案。您需要unique在正确的列上调用该方法,这将返回具有该列中唯一值的熊猫系列,然后使用该tolist方法将其转换为列表。


以下列的示例SKU。


import pandas as pd 


df = pd.read_csv('final_csv.csv', sep=";")

sku_unique = df['SKU'].unique().tolist()

如果您不知道/关心列名,您可以iloc在正确的列数上使用。请注意,计数索引从 0 开始:


df.iloc[:,0].unique().tolist()

如果问题是打算只获取出现一次的值,那么您可以使用该value_counts方法。这将创建一个以索引为值的系列,SKU以计数为值,然后您必须以类似的方式将系列的索引转换为列表。使用第一个示例:


import pandas as pd 


df = pd.read_csv('final_csv.csv', sep=";")

sku_counts = df['SKU'].value_counts()

sku_single_counts = sku_counts[sku_counts == 1].index.tolist()


查看完整回答
反对 回复 2021-12-17
?
哔哔one

TA贡献1854条经验 获得超8个赞

如果您想要第一列的唯一值,您可以修改您的代码以使用 aset而不是 a list。也许是这样的:


import collections

import csv

filename = 'final_csv.csv'


sku_list = []

with open(filename, 'r', encoding='utf-8') as f:

    csv_reader = csv.reader(f, delimiter=";")


    for i, row in enumerate(csv_reader):

        if i == 0:

            # skip the header

            continue


        try:

            sku = row[0]

            sku_list.append(sku)

        except IndexError:

            pass


print('All SKUs:')

print(sku_list)


sku_set = set(sku_list)

print('SKUs after removing duplicates:')

print(sku_set)


c = collections.Counter(sku_list)

sku_list_2 = [k for k, v in c.items() if v == 1]

print('SKUs that appear only once:')

print(sku_list_2)


with open('output.csv', 'w') as f:

    for sku in sorted(sku_set):

        f.write('{}\n'.format(sku))


查看完整回答
反对 回复 2021-12-17
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

既不使用pandas也不使用的解决方案csv:


lines = open('file.csv', 'r').read().splitlines()[1:]


col0 = [v.split(';')[0] for v in lines]


uniques = filter(lambda x: col0.count(x) == 1, col0)

或者,使用map(但可读性较差):


col0 = list(map(lambda line: line.split(';')[0], open('file.csv', 'r').read().splitlines()[1:]))


uniques = filter(lambda x: col0.count(x) == 1, col0)


查看完整回答
反对 回复 2021-12-17
  • 3 回答
  • 0 关注
  • 359 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号