Csvファイルでn行をスキップする方法を理解するのに問題がありますが、1行であるヘッダーを保持します。
私がやりたいのは、繰り返しですが、ヘッダーを最初の行から保持します。 skiprows
は、ヘッダーをスキップされた行の後の最初の行にします。これを行う最善の方法は何ですか?
data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)
行番号のリストを整数ではなくskiprows
に渡すことができます。
関数に整数10を指定すると、最初の10行がスキップされます。
最初の行0を(ヘッダーとして)保持し、行10までの他のすべてをスキップするには、次のように記述できます。
pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))
read_csv
を使用して行をスキップする他の方法read_csv
が使用する行を制御する2つの主な方法は、header
またはskiprows
パラメーターです。
次の1列のCSVファイルがあるとします。
a
b
c
d
e
f
以下の各例では、このファイルはf = io.StringIO("\n".join("abcdef"))
です。
すべての行を値として読み取ります(ヘッダーなし、デフォルトは整数)
>>> pd.read_csv(f, header=None)
0
0 a
1 b
2 c
3 d
4 e
5 f
特定の行をヘッダーとして使用します(その前のすべての行をスキップします)。
>>> pd.read_csv(f, header=3)
d
0 e
1 f
MultiIndexを作成するヘッダーとして複数の行を使用します(最後に指定されたヘッダー行の前のすべての行をスキップします)。
>>> pd.read_csv(f, header=[2, 4])
c
e
0 f
ファイルの先頭からN行をスキップします(スキップされない最初の行はヘッダーです):
>>> pd.read_csv(f, skiprows=3)
d
0 e
1 f
行インデックスを指定して1つ以上の行をスキップします(スキップされない最初の行はヘッダーです)。
>>> pd.read_csv(f, skiprows=[2, 4])
a
0 b
1 d
2 f
すでに素晴らしい答え..ここに一般化されたフォームを追加する必要性をどうにか感じます。このシナリオを考慮してください:-
Xls/csvの上位2行(行#0,1)にジャンク行があるとします。行#2(3行目)が実際のヘッダーであり、行#50(つまり51行目)から始まる10行をロードする必要があります。スニペットは次のとおりです。
pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)
@AlexRileyの答えを拡張するために、skiprows
引数は、スキップする行を決定する数値のリストを取ります。そう:
pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))
以下と同じです:
pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])
特定の行を無視する最善の方法は、(手動で、または整数のリストを返すrange
などの関数を使用して)無視リストを作成し、skiprows
に渡すことです。
長いcsvファイルを繰り返し処理する場合は、 chunksize 引数を使用できます。何らかの理由で手動でステップスルーする必要がある場合は、反復処理の回数を知っている限り、以下を試すことができます。
for i in range(num_iters):
pd.read_csv('test.csv', sep='|', header=0,
skiprows = range(i*10 + 1, (i+1)*10), nrows=10)
特定の行をスキップ/ドロップする必要がある場合は、最初の3行(つまり、0,1,2)、さらに2行(つまり、4,5)を言います。次を使用して、ヘッダー行を保持できます。
df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)