【问题标题】:Skip Rows in CSV Containing Specific String跳过 CSV 中包含特定字符串的行
【发布时间】:2019-08-30 00:46:18
【问题描述】:

我有一个字符串列表(比这个例子长)。如果其中一个字符串存在于一行数据中,我想跳过该行。这是我目前所拥有的,但我得到一个索引错误,这让我相信我没有正确循环。

stringList = ["ABC", "AAB", "AAA"]

with open('filename.csv', 'r')as csvfile:
    filereader = csv.reader(csvfile, delimiter=',')
    next(filereader, None) #Skip header row
    for row in filereader:
        for k in stringList:
            if k not in row:
                data1 = column[1] 

我得到的错误:IndexError: list index out of range。我意识到我正在按行阅读,但我需要按列提取数据。

【问题讨论】:

  • 我没有看到 column 分配到任何地方。
  • 如果您的 CSV 有标题,我建议使用 DictReader
  • data1 = column[1] 替换为data1 = row[1]。如果需要,添加检查 len(row)>1

标签: python python-2.7 csv for-loop


【解决方案1】:

使用 pandas,您可以轻松做到这一点,只需戴上面具。查看更多:link

import pandas as pd

data = pd.read_csv('filename.csv')
data = data.loc[data['column_name'] not in stringList]

【讨论】:

    【解决方案2】:

    错误是因为row 是一个列表,而您正在使用/访问它作为普通变量。 您可以使用列表行的适当索引来访问某些列。例如:在第一次迭代中,row[0] 将是第一行第一列中的元素,row[1] 第二列条目等等。在row 的后续迭代中,您可以向下访问后续列的条目。

    这是一个简单的循环。

    for row in filereader:
            for k in stringList:
                for i in range(len(row)):
                    if k not in row[i]:
                        someVar=row[i]
    

    【讨论】:

    • 这会导致错误:TypeError: 'int' object is not iterable
    • 你的意思是range(len(row))
    • 是的,很抱歉。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2014-05-16
    • 2019-08-31
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多