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

2024-09-29 19:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

将file1中的每个值col(0)与file2中的每个值进行比较,然后删除file1行(如果与file2中的任何值匹配),最简单的方法是什么?你知道吗

我尝试使用此代码来完成匹配部分,但出现语法错误,我认为是因为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)

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


Tags: 文件csvpy列表fordataopenfile1
1条回答
网友
1楼 · 发布于 2024-09-29 19:26:27

如果您愿意使用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

相关问题 更多 >

    热门问题