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-インデックス付き)またはスキップする行数(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では機能しません)、ファイルを2回読み取る必要がありますが、ファイルの内容全体をメモリに保存する必要がないという利点があります。

もちろん、Pythonのgrepと同じことを行うこともできますが、おそらく遅くなります。

于 2013-04-09T19:49:29.943 に答える