3 回答
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()
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))
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)
添加回答
举报
