使用python遍历CSV文件列以检查是否存在字符串

disho6za  于 2023-06-28  发布在  Python
关注(0)|答案(2)|浏览(170)

我有一个带有Target列的csv文件。我用pandas来读取csv。我希望用户添加一个字符串并遍历csv文件的Target列,如果该字符串存在,则打印,如果不存在,则要求用户重新输入该字符串。然而,无论我做什么,都不能识别输入字符串,尽管它在文件中,我经常得到再次输入的提示。

rawdata = pd.read_csv("pcr.csv")
targetlist = rawdata["Target"]
gene1 = input("Enter a gene: ")
for item in targetlist:   #I have also used in rawdata["Target"] without success
    if gene1 == item:
        print("Gene 1: " + gene1)
    else:
        gene1 = input("Not found. Enter again: ")
wd2eg0qa

wd2eg0qa1#

建议:
1.使用Pandas Dataframe 而不是循环

df = pd.read_csv("pcr.csv")
gene1 = input("Enter a gene: ")
df["match_gene1"] = df.Target == gene1

然后你可以得到一系列匹配的目标:
matching_targets = df[df.match_gene1].Targets
这是因为df.match_gene1是一个布尔序列,用作行选择条件。
1.你真的想要“精确”的匹配吗?
语句df.Target == gene1需要区分大小写的完全匹配。如果这不是您想要的,请更新您的问题,输入和期望的输出。

yi0zb3m4

yi0zb3m42#

问题是你的else在for语句里。问题是..它读取第一项如果第一项不匹配,它会要求你再次输入,因此,它不会遍历每一项。我会通过做一些更像这样的事情来解决这个问题:

rawdata = pd.read_csv("pcr.csv")
targetlist = rawdata["Target"]

while True:  
  gene1 = input("Enter a gene: ")
  check = False # Make this boolean
  for item in targetlist:   
    if gene1 == item:
        print("Gene 1: " + gene1)
        ckeck = True
        
  if check == True:
    break
  else:
    print("could not find gene, please enter again")

相关问题