2017-10-30 3 views
0

Mit Einheitentests von Python, wie kann ich überprüfen, dass die Spaltennamen von Pandas DataFrame mit Spaltennamen der Liste übereinstimmen?"assertTrue" Unit-Tests auf Pandas DataFrame anwenden?

import unittest 

column_names_list = ["col1","col2","col3"] 

assertTrue(df.columns in column_names_list) 

Zum Beispiel sollte ich für diese df Falsch erhalten:

col1 col2 col3 col4 
aasa 4546 5643 shsh 
... 
+1

'sortiert (Liste (set (df.columns) & set (column_names_list))) == column_names_list'? – Wen

Antwort

1

set Verwenden Sie den Unterschied zwischen zwei Listen finden und assert, dass es 0 ist

In [40]: assert len(set(df.columns) - set(['A', 'B', 'C'])) == 0 

In [41]: assert len(set(df.columns) - set(['A', 'B', 'D'])) == 0 
--------------------------------------------------------------------------- 
AssertionError       Traceback (most recent call last) 
----> 1 assert len(set(df.columns) - set(['A', 'B', 'D'])) == 0 
+0

Wird es die Namen überprüfen? Nicht nur Anzahl der Spalten? – Dinosaurius

+0

Ich bekomme 'IndentationError: unerwarteter Einzug' neben' assert'. Ich benutze Python 2.7. – Dinosaurius

+0

Ich bin auch, müssen Sie ein Müllzeichen oder unbeabsichtigte Leerzeichen/Tab einführen. Wie für 'set', lesen Sie mehr [hier] (https://docs.python.org/2/library/sets.html). Mit 'set' können wir einen Komponententest schreiben, der besagt, dass keine Liste von Spalten ein Element enthält, das nicht in dem anderen ist. Die Reihenfolge spielt keine Rolle. Listen sind nicht hashbar, daher können Sie das Schlüsselwort "in" aus Ihrem Beispiel nicht verwenden. –

1

Sie können auch Verwenden Sie die Gleichheit der Mengen. Auf diese Weise ein Assertionsfehler hilfreicher sein kann (mit geschweiften Klammern für Sätze):

df = pd.DataFrame([], columns=['col1', 'col2', 'col3']) 
assert set(df.columns) == {'col1', 'col2', 'col3'} 

passend nicht passend

df = pd.DataFrame([], columns=['col1', 'col2']) 
assert set(df.columns) == {'col1', 'col2', 'col3'} 
Verwandte Themen