Python Pandas read_csv überspringt Zeilen, behält aber den Header bei

75

Ich habe Probleme herauszufinden, wie man n Zeilen in einer CSV-Datei überspringt, aber behalte den Header, der die 1 Zeile ist.

Ich möchte iterieren, aber den Header aus der ersten Zeile behalten. skiprowsmacht den Header zur ersten Zeile nach den übersprungenen Zeilen. Was ist der beste Weg, dies zu tun?

data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)
mcd
quelle

Antworten:

115

Sie können skiprowsanstelle einer Ganzzahl eine Liste mit Zeilennummern übergeben .

Wenn Sie der Funktion die Ganzzahl 10 geben, überspringen Sie nur die ersten 10 Zeilen.

Um die erste Zeile 0 (als Überschrift) beizubehalten und dann alles andere bis zur Zeile 10 zu überspringen, können Sie schreiben:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

Andere Möglichkeiten zum Überspringen von Zeilen mit read_csv

Die beiden Hauptmethoden zum Steuern, welche Zeilen read_csvverwendet werden, sind die Parameter headeroder skiprows.

Angenommen, wir haben die folgende CSV-Datei mit einer Spalte:

a
b
c
d
e
f

In jedem der folgenden Beispiele ist diese Datei f = io.StringIO("\n".join("abcdef")).

  • Lesen Sie alle Zeilen als Werte (kein Header, standardmäßig Ganzzahlen)

    >>> pd.read_csv(f, header=None)
       0
    0  a
    1  b
    2  c
    3  d
    4  e
    5  f
    
  • Verwenden Sie eine bestimmte Zeile als Überschrift (überspringen Sie alle Zeilen davor):

    >>> pd.read_csv(f, header=3)
       d
    0  e
    1  f
    
  • Verwenden Sie mehrere Zeilen als Kopfzeile, um einen MultiIndex zu erstellen (überspringen Sie alle Zeilen vor der zuletzt angegebenen Kopfzeile):

    >>> pd.read_csv(f, header=[2, 4])                                                                                                                                                                        
       c
       e
    0  f
    
  • Überspringen Sie N Zeilen vom Anfang der Datei (die erste Zeile, die nicht übersprungen wird, ist die Kopfzeile):

    >>> pd.read_csv(f, skiprows=3)                                                                                                                                                                      
       d
    0  e
    1  f
    
  • Überspringen Sie eine oder mehrere Zeilen, indem Sie die Zeilenindizes angeben (die erste Zeile, die nicht übersprungen wird, ist die Kopfzeile):

    >>> pd.read_csv(f, skiprows=[2, 4])                                                                                                                                                                      
       a
    0  b
    1  d
    2  f
    
Alex Riley
quelle
10

Schon gute Antworten. Ich habe irgendwie das Bedürfnis, das verallgemeinerte Formular hier hinzuzufügen. Betrachten Sie dieses Szenario: -

Angenommen, Ihr xls / csv hat Junk-Zeilen in den oberen 2 Zeilen (Zeile # 0,1). Zeile 2 (3. Zeile) ist der eigentliche Header und Sie möchten 10 Zeilen ab Zeile 50 (dh 51. Zeile) laden. Hier ist der Ausschnitt: -

pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)

Zakir
quelle
Kurze aber gute Erklärung!
Codebusta
3

Um die Antwort von @ AlexRiley zu erweitern, verwendet das skiprowsArgument eine Liste von Zahlen, die bestimmt, welche Zeilen übersprungen werden sollen. Damit:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

ist das gleiche wie:

pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])

Der beste Weg, um bestimmte Zeilen zu ignorieren, besteht darin, eine Ignorierliste zu erstellen (entweder manuell oder mit einer solchen Funktion range, die eine Liste von Ganzzahlen zurückgibt) und an diese zu übergeben skiprows.

Prateek Khatri
quelle
1

Wenn Sie eine lange CSV-Datei durchlaufen, können Sie das Argument chunksize verwenden . Wenn Sie es aus irgendeinem Grund manuell durchlaufen müssen, können Sie Folgendes versuchen, solange Sie wissen, wie viele Iterationen Sie durchlaufen müssen:

for i in range(num_iters):
    pd.read_csv('test.csv', sep='|', header=0, 
                 skiprows = range(i*10 + 1, (i+1)*10), nrows=10)
JohnM
quelle
1

Wenn Sie bestimmte Zeilen überspringen / löschen müssen, sagen Sie die ersten 3 Zeilen (dh 0,1,2) und dann 2 weitere Zeilen (dh 4,5). Sie können Folgendes verwenden, um die Kopfzeile beizubehalten:

df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)
Lawrence Jacob
quelle