2017-02-07 3 views
1

Pandas read_table Funktion fehlt einige Zeilen in einer Datei Ich versuche zu lesen, und ich kann nicht herausfinden, warum.Pandas read_table() fehlende Zeilen

import pandas as pd 
import numpy as np 
filename = "whatever.txt" 

df_pd = pd.read_table(filename, use_cols=['FirstColumn'], skip_blank_lines=False) 
df_np = np.genfromtxt(filename, usecols=0) 

#function to count file line by line 
def file_len(fname): 
    with open(fname) as f: 
     for i, l in enumerate(f): 
      pass 
    return i + 1 

len_pd = len(df_pd) 
len_np = len(df_np) 
len_linebyline = file_len(filename) 

Leider kann ich nicht meine aktuellen Daten teilen, weil es ist eine große Datei, 30 Spalten x 58 Millionen Zeilen außer durch Lizenzierung geschützt. Aus irgendeinem Grund geben die Methoden numpy und file_len die richtige Länge von ~ 58 Millionen Zeilen, aber die Pandas-Methode hat nur ~ 55 Millionen.

Hat jemand irgendwelche Ideen, was könnte dies verursachen oder wie könnte ich es untersuchen?

+0

Bitte geben Sie eine __reproducible__ Probe (verwenden gefälschte Daten) Datensatz - 3-5 Zeilen würde ausreichen, um ... Bitte lesen Sie [wie um gut reproduzierbare Pandas-Beispiele zu machen] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

+0

@MaxU Die erste Spalte, auf die ich in diesem Beispiel referenziere, ist nur ganze Zahlen welche als ID funktionieren. Ich weiß nicht, wie ich ein reproduzierbares Sample bereitstellen würde, weil es scheint, als ob die meisten Daten in Ordnung wären, aber irgendwo in der Mitte gibt es einen Teil davon, der das Problem verursacht, aber ich weiß nicht, wie dieser Chunk anders ist oder wo es ist. Danke für die Verweisung auf diese andere Frage obwohl – jesseWUT

+0

Die Wahrscheinlichkeit, dass jemand Ihr Problem erraten wird, nicht in der Lage zu sein, den reproduzierbaren Datensatz zu sehen, ist sehr niedrig ... Also müssten Sie das Problem analysieren, um herauszufinden, welche Daten auf den Pandas fehlen Seite und danach wissen Sie entweder den Grund oder können einen __reproduzierbaren__ Datensatz zur Verfügung stellen. Nur meine $ 0,02 – MaxU

Antwort

1

folgende Vorgehensweise verwenden, können Sie versuchen, die fehlenden Daten zu finden:

In [31]: df = pd.DataFrame({'col':[0,1,2,3,4,6,7,8]}) 

In [32]: a = np.arange(10) 

In [33]: df 
Out[33]: 
    col 
0 0 
1 1 
2 2 
3 3 
4 4 
5 6 
6 7 
7 8 

In [34]: a 
Out[34]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

In [35]: np.setdiff1d(a, df.col) 
Out[35]: array([5, 9]) 
Verwandte Themen