我有一个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"
字符串。
是否可以检查一行是否以日期开头并且只读取那些?
答案 0 :(得分:7)
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…
答案 1 :(得分:3)
当您从row
获得csv.reader
,并且当您可以确定第一个元素是字符串时,则可以使用
if not row[0].startswith('TEST'):
process(row)
答案 2 :(得分:2)
skiprows:list-like或integer 要跳过的行号(0索引)或要跳过的行数(int)
传递[0, 6]
以使用“TEST”跳过行。
答案 3 :(得分: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做同样的事情,但它可能会慢一些。