pandas, DataFrame wird plötzlich zum Empty DataFrame

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Ich habe folgenden Quellcode (Auszug!). Das ist bei mir in eine größere Programmlogik eingebunden:

Code: Alles auswählen

from pprint import pprint

print(type(werte))
pprint(werte)
input(">>> Weiter? ")

print(type(werte))
pprint(werte[start_index:ende_index])
input(">>> Weiter? ")
Und bekomme da dann folgende Ergebnisse in der Konsole, die ich mir aktuell nicht erklären kann.

Code: Alles auswählen

<class 'pandas.core.frame.DataFrame'>
           Spaltenkopf
730851.0   15.12
730882.0   18.12
730910.0   20.12
730941.0   20.12
730971.0   22.12
[...]

[187 rows x 1 columns]
>>> Weiter? 
<class 'pandas.core.frame.DataFrame'>
Empty DataFrame
Columns: [Spaltenkopf]
Index: []
>>> Weiter? 
Hat jemand eine Idee, was da passieren könnte? Das Empty DataFrame wundert mich, weil ich an den Daten zwischenzeitlich (s. o.!) nicht gearbeitet habe. Mache ich etwas falsch, habe ich was übersehen oder ist das ein bekanntes Problem? Das hat mich heute geringfügig überrascht.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie sieht denn `werte`bei dir aus? Zeig' doch mal den Befehl, der `werte` Werte zuweist.

Gruß, noisefloor
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@pixewakb: wenn seltsame Dinge passieren, heißt das meist, an einer Stelle, wo Du nicht dran denkst. Da hilft es wenig, einen Auszug zu zeigen, denn der zeigt das Problem offensichtlich nicht.

Poste einen lauffähigen Code, der das Problem auch zeigt.
BlackJack

@pixewakb: Der Frame ändert sich ja nicht, Du gibst da ja zwei verschiedene Frames aus. Und einer ist halt leer. Wie kann das sein? Die Slice-Indices sind gleich oder Ende ist kleiner als Start, oder der Slice liegt ausserhalb der tatsächlich vorhandenen Zeilenanzahl. Kann man ja auch schon mit einer Liste demonstrieren:

Code: Alles auswählen

In [1]: A = list(range(10))

In [2]: A
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [3]: A[5:5]
Out[3]: []

In [4]: A[5:1]
Out[4]: []

In [5]: A[23:42]
Out[5]: []
Das gilt auch für `DataFrame`\s.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Sirius3 hat geschrieben:Poste einen lauffähigen Code, der das Problem auch zeigt.
Das wird ein Problem - an dem ich aber arbeiten werde -, weil ich da etliche Fremdbibliotheken sowie eigene Bibliotheken in einem kleinen Abschnitt verwende. Ich versuche mal den Fehler zu isolieren und dann was zu posten.
BlackJack hat geschrieben:@pixewakb: Der Frame ändert sich ja nicht, Du gibst da ja zwei verschiedene Frames aus. Und einer ist halt leer. Wie kann das sein? Die Slice-Indices sind gleich oder Ende ist kleiner als Start, oder der Slice liegt ausserhalb der tatsächlich vorhandenen Zeilenanzahl. Kann man ja auch schon mit einer Liste demonstrieren:
Ich hatte zunächst einen Fehler in meiner pandas-Installation vermutet (die muckerte schon mal rum), auf die Indizes bin ich nicht gekommen. Dem gehe ich gleich mal nach. (<s>Obwohl der Fehler vorher auftreten müsste, weil die zweite type()-Anweisung noch vor Setzen der Indizes erfolgt!?</s>) Ich gebe mich mal wieder an den Quelltext heran...

DANKE fürs Feedback!

PS Die Ansage leeres DataFrame erscheint beim Printen des DataFrames. Ich komme der Sache näher...
BlackJack

@pixewakb: Die beiden `print()`/`type()` geben doch auch das gleiche aus. Die geben beide ``<class 'pandas.core.frame.DataFrame'>``. ``Empty DataFrame`` kommt nicht von dieser Zeile, sondern wirklich erst von dem leeren `DataFrame`

Code: Alles auswählen

In [6]: import pandas as pd

In [7]: pd.DataFrame()
Out[7]: 
Empty DataFrame
Columns: []
Index: []

In [8]: type(pd.DataFrame())
Out[8]: pandas.core.frame.DataFrame
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@pixewakb: anhand Deines Codefragments sind nicht passende Index-Werte am wahrscheinlichsten. Gibt diese doch einfach mal aus:

Code: Alles auswählen

print(type(werte))
pprint(werte[start_index:ende_index])
print(start_index, ende_index)
Dann siehst Du recht schnell, ob es daran liegt.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Danke fürs Feedback! Ich habe den Fehler inzwischen gefunden und arbeite an dessen Behebung.

Ich habe mehrere Listen, die ich parallel begrenzen (slicing) muss, wobei ich eine Liste mit Datumswerten als Muster verwende. Ich habe nicht bedacht, dass ich bei den DataFrames die Datumswerte als Index verwende, so dass ich mit Integern als Index nicht weiterkomme :oops: Danke für die Denkanstöße!!!
Antworten