Pandas read_fwf lädt nicht den gesamten Inhalt der Datei

Ich habe eine ziemlich große Datei mit fester Breite (~ 30M Zeilen, 4 GB) und als ich versuchte, ein DataFrame mit Pandas read_fwf () zu erstellen, hat es nur einen Teil der Datei geladen und war nur neugierig, wenn jemand ein ähnliches Problem mit hat Dieser Parser liest nicht den gesamten Inhalt einer Datei.

import pandas as pd file_name = r"C:\....\file.txt" fwidths = [3,7,9,11,51,51] df = read_fwf(file_name, widths = fwidths, names = [col0, col1, col2, col3, col4, col5]) print df.shape #<30M 

Wenn ich die Datei naiv in 1 Spalte mit read_csv () lese, wird die ganze Datei in den Speicher gelesen und es gibt keinen Datenverlust.

  • Ist das Standarddict in Pythons Sammlungsmodul wirklich schneller als mit setdefault?
  • Verwenden Sie Fälle für die 'setdefault' dict-Methode
  • Warum wird dieses Python-Wörterbuch aus der Bestellung mit setdefault () erstellt?
  • Python dict: get vs setdefault
  •  import pandas as pd file_name = r"C:\....\file.txt" df = read_csv(file_name, delimiter = "|", names = [col0]) #arbitrary delimiter (the file doesn't include pipes) print df.shape #~30M 

    Natürlich, ohne den Inhalt oder das Format der Datei zu sehen, könnte es mit etwas auf meinem Ende in Verbindung gebracht werden, aber wollte sehen, ob jemand sonst irgendwelche Probleme mit diesem in der Vergangenheit hatte. Ich habe eine Sanitätsprüfung getestet und ein paar der Zeilen tief in der Datei getestet und sie alle scheinen korrekt formatiert zu sein (weiter verifiziert, als ich in der Lage war, diese in eine Oracle DB mit Talend mit den gleichen Spezifikationen zu ziehen).

    Lassen Sie mich wissen, ob jemand irgendwelche Ideen hat, es wäre toll, alles über Python laufen und nicht hin und her gehen, wenn ich anfange, Analytik zu entwickeln.

  • Das Öffnen der bereits geöffneten Datei erhebt keine Ausnahme
  • Wie benutzt man Python, um GDB-Unterprozeß zu erstellen und Befehle dynamisch basierend auf Ausgabe zu senden?
  • Warum verlangsamen sich mehrere Prozesse?
  • Berechtigung verweigerte, os.mkdir (d) nach dem Ausführen von shutil.rmtree (d) in Python zu verweigern
  • Effizientes Lesen von 800 GB XML-Datei in Python 2.7
  • Python Mehrere Datei schriftlich Frage
  • One Solution collect form web for “Pandas read_fwf lädt nicht den gesamten Inhalt der Datei”

    Nur wenige Zeilen der Eingabedatei wären nützlich, um zu sehen, wie das Datum aussieht. Trotzdem habe ich eine zufällige Datei von ähnlichem Format (ich glaube), die du hast, und pd.read_fwf darauf pd.read_fwf . Dies ist der Code für die Generation und das Lesen:

    Aus zufälligen import random

     import pandas as pd file_name = r"/tmp/file.txt" lines_no = int(30e6) with open(file_name, 'w') as f: for i in range(lines_no): if i%int(1e5) == 0: print("Writing progress: {:0.1f}%" .format(float(i) / float(lines_no)*100), end='\r') f.write(" ".join(["{:<10.8f}".format(random()*10) for v in range(6)])+"\n") print("File created. Now read it using pd.read_fwf ...") fwidths = [11,11,11,11,11,11] df = pd.read_fwf(file_name, widths = fwidths, names = ['col0', 'col1', 'col2', 'col3', 'col4', 'col5']) #print(df) print(df.shape) #<30M 

    Also in diesem Fall, es näht es funktioniert gut. Ich benutze Python 3.4, Ubuntu 14.04 x64 und Pandas 0.15.1. Es dauert eine Weile, um die Datei zu erstellen und sie mit pd.read_fwf lesen. Aber es scheint zu funktionieren, zumindest für mich und mein Setup.

    Das Ergebnis ist: (30000000, 6)

    Beispieldatei erstellt:

     7.83905215 9.64128377 9.64105762 8.25477816 7.31239330 2.23281189 8.55574419 9.08541874 9.43144800 5.18010536 9.06135038 2.02270145 7.09596172 7.17842495 9.95050576 4.98381816 1.36314390 5.47905083 6.63270922 4.42571036 2.54911162 4.81059164 2.31962024 0.85531626 2.01521946 6.50660619 8.85352934 0.54010559 7.28895079 7.69120905 
    Python ist die beste Programmiersprache der Welt.