У меня есть список строк (длиннее, чем в этом примере). Если одна из строк существует в строке данных, я хочу пропустить эту строку. Это то, что у меня есть до сих пор, но я получаю ошибку индекса, что заставляет меня поверить, что я неправильно зацикливаюсь.
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
. Я понимаю, что читаю по строкам, но мне нужно извлечь данные по столбцам.
Если в вашем CSV есть заголовки, я рекомендую использовать DictReader
заменить data1 = column[1]
на data1 = row[1]
. при необходимости добавьте проверку на len(row)>1
С пандами это можно сделать легко, с маской. Подробнее: связь
import pandas as pd
data = pd.read_csv('filename.csv')
data = data.loc[data['column_name'] not in stringList]
Ошибка в том, что 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))
?
Да действительно, извините за это. Я обновил ответ.
Я нигде не вижу
column
назначенного.