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.

  • Python dict: get vs setdefault
  • Ist das Standarddict in Pythons Sammlungsmodul wirklich schneller als mit setdefault?
  • Warum wird dieses Python-Wörterbuch aus der Bestellung mit setdefault () erstellt?
  • Verwenden Sie Fälle für die 'setdefault' dict-Methode
  •  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.

  • Unterklassen von Datei durch Unterklassen `io.TextIOWrapper` - aber welche Unterschrift hat der Konstruktor?
  • Keine Druckausgabe von Kind Multiprocessing.Process, es sei denn, das Programm stürzt ab
  • IOError: kann keine Ressource öffnen
  • Das Öffnen der bereits geöffneten Datei erhebt keine Ausnahme
  • Konvertieren von python.io Objekt zu std :: istream bei Verwendung von boost :: python
  • Laufen Flasche + gevent + Anfragen nicht servieren 'gleichzeitig'
  • 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.