Python 删除列值与单独文件列表中的值匹配的行的最简单方法?

Python 删除列值与单独文件列表中的值匹配的行的最简单方法?,python,csv,Python,Csv,我有两个文件,file1是一个有几百行和12列的csv,file2是一个有几百个值的列表 将文件1中的每个值col(0)与文件2中的每个值进行比较,然后如果与文件2中的任何值匹配,则删除文件1行的最简单方法是什么 我尝试使用此代码进行匹配部分,但出现语法错误,我认为这是因为python不允许两个并发读卡器: initialAvail = open('py_all1.csv') Reader1 = csv.reader(initialAvail) data_list1 = list(csv.rea

我有两个文件,file1是一个有几百行和12列的csv,file2是一个有几百个值的列表

将文件1中的每个值col(0)与文件2中的每个值进行比较,然后如果与文件2中的任何值匹配,则删除文件1行的最简单方法是什么

我尝试使用此代码进行匹配部分,但出现语法错误,我认为这是因为python不允许两个并发读卡器:

initialAvail = open('py_all1.csv')
Reader1 = csv.reader(initialAvail)
data_list1 = list(csv.reader(initialAvail))
IpodPLexcl = open('ipod_py.csv', 'a') 
Reader2 = csv.reader(IpodPLexcl)
data_list2 = list(csv.reader(IpodPLexcl))

for i in range(1, len(data_list1)):
        Reader1item = int(data_list1[i][0])
        for j in range(1, len(data_list2)):
                Reader2item = int(data_list2[i][0])
                if Reader1item == Reader2item:
                        compareMatch = True
                        print(compareMatch)

我是否必须使用字典(因为第二个文件只是一个列表,而不是包含多个COL的csv)?

如果您愿意使用pandas库,那么一个简单的代码将为您提供所需的结果:

假设:py_all1.csv是我们要从中删除行的文件

import pandas as pd

df1 = pd.read_csv('py_all1.csv') # file with multiple columns
df2 = pd.read_csv('ipod_py.csv') # file with one column

mask = df1.iloc[:,0].isin(df2.iloc[:,0])
df1[~mask].to_csv('output.csv', index=False)
# change output.csv to 'py_all1.csv' if desired output
我尝试了以下示例数据:

file1_data = '''\
A,B
New York,1
Paris,2
London,3
'''

file2_data= '''\
A
New York
Paris'''

with open('py_all1.csv','w') as f1, open('ipod_py.csv','w') as f2:
    f1.write(file1_data)
    f2.write(file2_data)
结果是:

A,B
London,3

把问题分开:1。读取内存中的文件。2.应用规则。3.如果存在更改,则覆盖原始文件。可能您是对的,因为这些文件比此步骤之前的原始文件小。我强烈建议您阅读并开始遵循命名规则,特别是。看看pandas库,用python操作表。几小时后,你将在未来节省很多时间。我不够聪明,无法理解文档,所以我很欣赏这个例子。如果我现在明白了…如果您不删除基于匹配数据的行,如在
mask=df1.iloc[:,0].isin(df2.iloc[:,0])
中删除具有来自df1的偏移值的行,如第2列,该怎么办?另一种方式是从df1输出一个列2值列表,用于df1列0和df2列0匹配的行。好的,您只需像在
mask=df1.iloc[:,2].isin(df2.iloc[:,0])df1[mask]中那样删除波浪线即可。到_csv('output.csv',index=False)
,然后您可以像在第一个示例中一样使用生成的文件。熊猫太棒了!另一个相关问题…在您的示例中,
file1\u data='''\A,B纽约,1巴黎,2伦敦,3'
这些值只出现一次。如果在file1_data下多次出现,则代码不会删除所有值。有解决办法吗?@user3447273好的,等等,现在唯一的问题是你的最后一个问题。我看不出有任何问题,代码应该有效地删除file2第一列中的所有项。如果你能提供样品,我很可能会帮你。通过搜索“{my problem}pandas”,你很可能会在这里找到答案(有很多问题)。