2012-10-04 11 views
29

In meiner Anwendung laden I Textdateien, die sich wie folgt zusammen:Tropfen nicht-numerische Spalten aus einer Pandas Dataframe

  • Erste nicht numerische Spalte (ID)
  • Eine Reihe von nicht-numerischen Spalten (Strings)
  • Eine Anzahl von numerischen Spalten (floats)

Die Anzahl der nicht-numerischen Spalten ist variabel. Zur Zeit lade ich die Daten in einem Datenrahmen wie folgt aus:

source = pandas.read_table(inputfile, index_col=0) 

Ich möchte alle nicht-numerischen Spalten auf einen Schlag fallen zu lassen, ohne ihre Namen oder Indizes zu wissen, da dies machbar sein könnte, ihre dtype lesen. Ist das mit Pandas möglich oder muss ich etwas selbst kochen?

+0

Verwandte: http://stackoverflow.com/q/25039626/5069869 – TheEspinosa

Antwort

24

mit einer privaten Methode vermeiden Sie auch select_dtypes verwenden können, wo Sie können entweder enthalten oder die dtypes ausschließen Sie wollen.

Ran in es auf this post auf genau die gleiche Sache.

Oder in Ihrem Fall, und zwar:
source.select_dtypes(['number']) or source.select_dtypes([np.number]

+1

Ich denke, das ist besser als die private Methode. Vielleicht sollten Sie die direkte Antwort auf die Frage hinzufügen, nämlich: source.select_dtypes (['number']) oder source.select_dtypes ([numpy.number]) – hardsetting

+0

Dies sollte die akzeptierte Antwort sein, obwohl die andere auch funktionieren wird Dies ist korrekter, ganz zu schweigen davon, dass sich die private Methode, die nicht Teil der API ist, jederzeit ändern kann. –

+0

Gibt es keine boolesche Rückgabe? Auch was ist der Unterschied zwischen 'Nummer' und 'np.number' (nur ein Zahlenfeld?) – Worthy7

29

It`sa private Methode, aber es wird den Trick: source._get_numeric_data()

In [2]: import pandas as pd 

In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]}) 

In [4]: source 
Out[4]: 
    A B  C 
0 foo 1 (1, 2) 
1 bar 2 (3, 4) 

In [5]: source._get_numeric_data() 
Out[5]: 
    B 
0 1 
1 2 
+0

Danke, funktioniert recht gut. – Einar

+0

Danke! Gibt es Vorsichtsmaßnahmen bei der Verwendung von "privaten Methoden" in Pandas? Oder, alternativ, warum ist das privat? (Ich kann eine neue Frage öffnen, wenn Sie vorschlagen.) –

+0

Im Allgemeinen wird das Hinzufügen/Entfernen/Ändern-API einer privaten Methode nicht als (Klassen-) API/Verhaltensänderung betrachtet. Mit anderen Worten könnte eine neue Version von Pandas, die als rückwärtskompatibel angesehen wird, beispielsweise eine private Methode entfernen. Ich glaube, dass _get_numeric_data() hauptsächlich verwendet wird, um Zeichenfunktionen/Methoden zu unterstützen. Wenn Sie glauben, dass dies eine nützliche Methode ist, können Sie eine Feature-Anfrage auf GitHub machen, in der Sie darum bitten, dass sie Teil der öffentlichen API wird. –

Verwandte Themen