查找一个csv文件的值,如果它存在于另一个文件的任何列中,并在新的csv中打印整行

时间:2018-04-17 00:15:17

标签: python pandas csv

这是我的第一个csv文件(作者列表)(单列)

  

Aaron Harwood

     

Kenji Kaneda

这是我的第二个csv文件(sigle专栏)

  

Aaron Harwood | Rajiv Ranjan | Rajkumar Buyya

     

AlejandroPérez-Méndez| AntonioFernandezGómez-Skarmeta |加布里埃尔   López|ÓscarCánovasReverte

     

Akinori Yonezawa | Kenji Kaneda | Kenjiro Taura

     

Aaron Harwood | abcd

     

Kenji Kaneda | abcde

     

Aaron Harwood | lxkc

现在我想在另一个.csv文件中打印具有给定作者姓名的所有行。我该如何继续做呢?

我试过这个

import pandas

authors = []
with open("Book1.csv", "r",encoding="ISO-8859-1") as f:
    r = pandas.read_csv(f)
    authors = list(r["author"])

i=0

with open("trialall.csv", "r",encoding="ISO-8859-1") as f:
    f.readline()
    for line in f:
        if authors[i] in line:
            i=i+1
            with open("newer.csv", "a", encoding="ISO-8859-1") as f2:
                f2.write(line)
                f2.write("\n")
                print("doing")

请建议更改。我期待输出csv将有这些行

  

Aaron Harwood | Rajiv Ranjan | Rajkumar Buyya

     

Akinori Yonezawa | Kenji Kaneda | Kenjiro Taura

     

Aaron Harwood | abcd

     

Kenji Kaneda | abcde

     

Aaron Harwood | lxkc

1 个答案:

答案 0 :(得分:0)

您不必为open每个文件,因为大熊猫会为您做到这一点。由于我没有让你.csv工作,我只是概述了结构,以便轻松适应任何微小的变化。

你可以做到

authors = pd.read_csv("Book1.csv")["authors"]
df = pd.read_csv("trialall.csv")
df["authors"] = df.str.split("|")

然后你就完成了

filter = df["authors"].apply(lambda x: any([item in k for item in x]))
df[filter].write_csv("newer.csv")