Можно ли использовать read_csv для чтения только определенных строк?

У меня есть CSV-файл, который выглядит следующим образом:

TEST  
2012-05-01 00:00:00.203 ON 1  
2012-05-01 00:00:11.203 OFF 0  
2012-05-01 00:00:22.203 ON 1  
2012-05-01 00:00:33.203 OFF 0  
2012-05-01 00:00:44.203 OFF 0  
TEST  
2012-05-02 00:00:00.203 OFF 0  
2012-05-02 00:00:11.203 OFF 0  
2012-05-02 00:00:22.203 OFF 0  
2012-05-02 00:00:33.203 OFF 0  
2012-05-02 00:00:44.203 ON 1  
2012-05-02 00:00:55.203 OFF 0  

и не может избавиться от"TEST" строка.

Можно ли проверить, начинается ли строка с даты, и прочитать только те, которые делают?

Ответы на вопрос(4)

http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html изюминка = read_csv # pandas.io.parsers.read_csv

skiprows: список или целые числа строк, которые нужно пропустить (0-индексированные) или количество строк, которые нужно пропустить (int)

Проходят[0, 6] чтобы пропустить строки с "ТЕСТ".

 eumiro23 мая 2012 г., 12:19
Боюсь, он знает, как выглядят такие строки, а не их индексы.

import pandas as pd
import subprocess
grep = subprocess.check_output(['grep', '-n', '^TITLE', filename]).splitlines()
bad_lines = [int(s[:s.index(':')]) - 1 for s in grep]
df = pd.read_csv(filename, skiprows=bad_lines)

Он менее переносим, чем @ eumiro (читай: вероятно, не работает в Windows) и требует чтения файла дважды, но имеет то преимущество, что вам не нужно хранить все содержимое файла в памяти.

Конечно, вы можете сделать то же самое, что и grep в Python, но, вероятно, это будет медленнее.

Решение Вопроса
from cStringIO import StringIO
import pandas

s = StringIO()
with open('file.csv') as f:
    for line in f:
        if not line.startswith('TEST'):
            s.write(line)
s.seek(0) # "rewind" to the beginning of the StringIO object

pandas.read_csv(s) # with further parameters…
 user141228623 мая 2012 г., 13:01
Благодарность! Это работает

Когда ты получишьrow отcsv.reader, и когда вы можете быть уверены, что первый элемент является строкой, тогда вы можете использовать

if not row[0].startswith('TEST'):
    process(row)

Ваш ответ на вопрос