8

我有一个如下所示的 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

4 回答 4

8
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…
于 2012-05-23T10:23:48.343 回答
4

当您row从 中获取csv.reader,并且可以确定第一个元素是字符串时,您可以使用

if not row[0].startswith('TEST'):
    process(row)
于 2012-05-23T10:10:06.580 回答
1

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html?highlight=read_csv#pandas.io.parsers.read_csv

skiprows : 类列表或整数要跳过的行号(0-indexed)或要跳过的行数(int)

通过[0, 6]以跳过带有“TEST”的行。

于 2012-05-23T10:17:15.827 回答
0

另一种选择,因为我也遇到了这个问题:

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)并且需要两次读取文件,但具有您不必将整个文件内容存储在内存中的优点。

你当然可以做与 Python 中的 grep 相同的事情,但它可能会更慢。

于 2013-04-09T19:49:29.943 回答