所以我有CSV1:
Name, City, Country
David, Los Angeles, US
Peter, Chicago, US
Mark, Chicago, US
Brian, New York, US
Paul, Los Angeles, US
Andy, Boston, US
Chris, Dallas, US
和CSV2:
City, Name, Country
PETER, Chicago, US
Adam, Florida, US
MARK, Chicago, US
James, Austin, US
BRIAN, New York, US
我想删除多余的名字。城市和国家是什么并不重要,因为我只需要将名称写到输出csv文件中。因此,在这种情况下,对于BRIAN和brian,它将删除冗余数据,只接受一个名字(brian)。同时,我还希望将CSV1格式但不是CSV2格式的数据(‘Name’)打印到输出文件中。因此,基本上,它是一个不区分大小写的过滤器。如下所示:
Name:
David
Peter
Mark
Brian
Paul
Andy
Chris
我已经尝试过以下代码:
import csv
# load second file as lookup table
data2 = {}
data1 = {}
with open('CSV2.csv', 'r') as csvinput:
reader = csv.reader(csvinput)
for row in csvinput:
data2[row[1]] = row
# now process first file against it
with open("CSV1.csv", 'r') as lookuplist:
reader1 = csv.reader(lookuplist)
for col in lookuplist:
data1[col[0]] = col
if col[0] not in data2:
print(col[0])
if col.lower()[0] == data2.lower()[1]:
print('Matches')
这是我得到的错误:
AttributeError: 'dict' object has no attribute 'lower'
我知道我创建的列表有问题,但我不能确定它是否真的是比较两列的小写并打印匹配,因为我想先验证它。
发布于 2018-06-08 05:22:29
似乎不需要导入csv,因为您可以通过在逗号上拆分来轻松提取信息。另外,最好添加一个检查,这样' name‘就不会被认为是有效的名称。
我不知道这是否是必需的,但是如果你需要用第三个文件过滤,我更喜欢定义一个函数,我们可以用参数调用它来立即构建一个未复制的列表。
def build_unduped_names(names_repository, file_name):
with open(file_name) as csvinput:
for row in csvinput:
exploded_row = row.split(',')
if exploded_row[0].lower() == 'name':
continue
names_repository[exploded_row[0].lower()] = True
file_names = [
'CSV1.csv',
'CSV2.csv',
]
unduped = {}
for file_name in file_names:
build_unduped_names(unduped, file_name)
print(set(unduped))
发布于 2018-06-08 04:57:51
试试这个:
csv1names = [(line.split()[0]).title() for line in csv1file]
csv2names = [(line.split()[0]).title() for line in csv2file]
filtered = [name if name not in csv2names for name in csv1names]
然后,您可以简单地将filtered
的内容写入您的文件。
发布于 2018-06-08 05:00:12
import pandas as pd
df = pd.read_csv('location/filename.csv')
df['Name'] = df['Name'].apply(lambda x: x.capitalize())
print(df['Name'].unique()) #Now you will get all the unique names.
将这些名称写入所需的csv文件
https://stackoverflow.com/questions/50749955
复制相似问题