2016-12-04 3 views
0

Sagen, ich habe (winzige Teilmenge von Daten mit vielen Spalten)Extract einzigartige genaue Zeichenfolge entspricht auf Datenrahmen Spalte

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'A (quarterly) 2010': np.random.rand(3), 
        'A (quarterly) 2011': np.random.rand(3), 
        'B (quarterly) 2010': np.random.rand(3), 
        'B (quarterly) 2011': np.random.rand(3), 
        'X' : np.random.randint(3, size=3)}) 

#Out[11]: 
# A (quarterly) 2010 A (quarterly) 2011 B (quarterly) 2010 \ 
#0   0.868228   0.300513   0.658819 
#1   0.383907   0.496740   0.347421 
#2   0.284787   0.795499   0.856398 

# B (quarterly) 2011 X 
#0   0.374479 1 
#1   0.812860 0 
#2   0.604731 2 

ich die einzigartigen Spiele in den Spaltennamen zu extrahieren, die ein bestimmtes Muster paßt, f. ex [A-B] \(.*\)\s.

Ich kann es tun, aber es ist sieht sehr haarig:

stubs = set([match[0] for match in df.columns.str.findall('[A-B] \(.*\) ').values if match != [] ]) 

list(stubs) 
#['B (quarterly) ', 'A (quarterly) '] 

Gibt es einen einfacheren Weg, dies zu tun?

Antwort

1

Hier ist eine andere Art und Weise, noch etwas haarig, aber ein bisschen mehr elegant:

def match(x): 
    m = re.findall(r'[A-B] \(.*\)\s',x) 
    return m[0] if m else None 

[stub for stub in df.columns.to_series().apply(match).unique() if stub] 
# ['A (quarterly) ', 'B (quarterly) '] 
Verwandte Themen