pandas 如何使用字典比较两个CSV中的两列?

jfewjypa  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(173)

我有两个较大的csv文件,我想比较csv1中的column1和csv2中的column1。我可以使用Python List来完成此操作,其中我读取了csv1并在list1中抛出column1,对csv2执行了相同的操作,然后检查list1中的元素是否存在于list2中

olist = []
def oldList(self):
    for row in self.csvreaderOld:
        self.olist.append(row[1])

nlist = []
def newList(self):
    for row in self.csvreaderNew:
        self.nlist.append(row[1])

def new_list(self):
    return [item for item in self.olist if item not in self.nlist]

代码工作,但可以很长时间来完成。我试图看看我是否可以使用字典代替,看看是否会更快,所以我可以比较关键字在字典1存在于字典2,但到目前为止还没有成功,由于我的知识有限。

brtdzjyr

brtdzjyr1#

如果它是一个大的CSV文件,或者您打算继续使用表格,我建议使用 * Pandas * 模块。
老实说,即使它是一个小文件,或者您不打算继续使用表格,* Pandas * 也是一个优秀的模块。
据我所知(我可能搞错了),对于读取CSV文件,* Pandas * 是最快的库之一。

import pandas as pd

df = pd.read_csv("path to your csv file", use_cols = ["column1", "column2"])

def new_list(df):
    return [item for item in df["column2"].values if item not in df["column1"].values]

检查Pandas系列中的项目时,使用.values非常重要(当您提取DataFrame中的列时,您将得到Pandas系列)
您还可以使用list(df["column1"])How to determine whether a Pandas Column contains a particular value中建议的其他方法来确定某个值是否包含在panda列中
例如:

df = pd.DataFrame({"column1":[1,2,3,4], "column2":[2,3,4,5]})

Dataframe 将被

column1   column2
1   2
2   3
3   4
4   5

new_line将返回[5]

eit6fx6z

eit6fx6z2#

你可以把两个文件都读入对象,然后在一个循环中进行比较,下面是一个简短的代码片段(不是类实现):

fsOld = open('oldFile.csv', 'r')
fsNew = open('newFile.csv', 'r')
fsLinesOld = fsOld.readlines()
fsLinesNew = fsNew.readlines()
outList = []

# assumes lines are same for both files data:
for i in range(0, fsLinesOld.__len__(), 1):
    if ( fsLinesOld[i] == fsLinesNew[i]):
        outList.append(fsLinesOld[i])
sf6xfgos

sf6xfgos3#

首先,更改阅读CSV文件的方式,如果只需要一列,请在usecols中注明,如下所示

df = pd.read_csv("sample_file.csv", usecols=col_list)

第二,如果不是逐行比较,可以使用setdifference,如下所示

set(df.col.to_list()).difference(set(df2.col.to_list()))

相关问题