2016-08-05 26 views
1

ich einen Datenrahmen wie dieses:Konvertieren Sie die abgegrenzten Daten in einem String-Werte in einer einzigen Spalte

Var_1 
201601_abc 
201603_tbc;201608_sdf;201508_dsf 
201601_abc;201508_dsf 
... 

ich eine einzelne Spalte möchten, dass die unterschiedlichen Werte in Var1 enthält (Werte getrennt durch „;“ sind als verschiedene

So Finale Datenrahmen wird wie:

Var_2 
201601_abc 
201603_tbc 
201608_sdf 
201508_dsf 
+0

Was meinst du mit Datenrahmen (ist es Pandas?) Was hast du bis jetzt versucht? Wenn Sie eine verschachtelte Liste verwenden, können Sie sie reduzieren. – Thiru

Antwort

2

IIUC sollten folgende arbeiten:

In [160]: 
df2 = pd.DataFrame(df['Var_1'].str.split(';',expand=True).stack().unique(), columns=['Var_2']) 
df2 

Out[160]: 
     Var_2 
0 201601_abc 
1 201603_tbc 
2 201608_sdf 
3 201508_dsf 

Diese die Werte auf dem Begrenzer teilt, dann stack s und gibt die unique Werte können wir dann ein neues df bauen auf dem zurückgegebenen Array basierten

Splitting die obigen Schritte:

In [161]: 
df['Var_1'].str.split(';',expand=True) 

Out[161]: 
      0   1   2 
0 201601_abc  None  None 
1 201603_tbc 201608_sdf 201508_dsf 
2 201601_abc 201508_dsf  None 

In [162]:  
df['Var_1'].str.split(';',expand=True).stack() 

Out[162]: 
0 0 201601_abc 
1 0 201603_tbc 
    1 201608_sdf 
    2 201508_dsf 
2 0 201601_abc 
    1 201508_dsf 
dtype: object 

In [163]: 
df['Var_1'].str.split(';',expand=True).stack().unique() 

Out[163]: 
array(['201601_abc', '201603_tbc', '201608_sdf', '201508_dsf'], dtype=object) 
+0

Danke. Welche Funktion hat Expand hier? – muni

+0

Es wird jeden Split in seiner eigenen Spalte zurückgeben, dies wird benötigt, weil ['stack'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.stack.html) ein' 'ist DataFrame' Methode, keine 'Series' Methode – EdChum