首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何应用不区分大小写的过滤器

如何应用不区分大小写的过滤器
EN

Stack Overflow用户
提问于 2018-06-08 04:48:56
回答 3查看 649关注 0票数 1

所以我有CSV1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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’)打印到输出文件中。因此,基本上,它是一个不区分大小写的过滤器。如下所示:

代码语言:javascript
复制
Name:
David  
Peter  
Mark  
Brian   
Paul  
Andy    
Chris  

我已经尝试过以下代码:

代码语言:javascript
复制
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')

这是我得到的错误:

代码语言:javascript
复制
AttributeError: 'dict' object has no attribute 'lower'

我知道我创建的列表有问题,但我不能确定它是否真的是比较两列的小写并打印匹配,因为我想先验证它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-08 05:22:29

似乎不需要导入csv,因为您可以通过在逗号上拆分来轻松提取信息。另外,最好添加一个检查,这样' name‘就不会被认为是有效的名称。

我不知道这是否是必需的,但是如果你需要用第三个文件过滤,我更喜欢定义一个函数,我们可以用参数调用它来立即构建一个未复制的列表。

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2018-06-08 04:57:51

试试这个:

代码语言:javascript
复制
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的内容写入您的文件。

票数 0
EN

Stack Overflow用户

发布于 2018-06-08 05:00:12

代码语言:javascript
复制
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文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档