2017-03-04 1 views
1

Eine der Säulen meiner Datenrahmen sieht auf alle Werte existieren:Split eine Pandas Spalte in zwei auf ein Trennzeichen aus, dass nicht so etwas wie dieses

[application] 
blah/3.14 
xyz/5.2 
abc 
... 
... 

(repräsentiert Software/Version)

I ist versucht, etwas zu erreichen:

[application] [name] [ver] 
blah/3.14  blah 3.14 
xyz/5.2  xyz  5.2 
abc   abc  na <-- this missing value can be filled in with a string too 
... 
... 

wie Sie schon sagen, ich mag die Säule in zwei Teile spalten, mit ‚/‘ als Trennzeichen. Ein Stapelüberlauf-Lösung schlägt vor, etwa wie folgt:

tmptbl = pd.DataFrame(main_tbl.application.str.split('/', 1).tolist(), columns= ['name', 'ver']) 
main_tbl['name'] = tmptbl.name 
main_tbl['ver'] = tmptbl.ver 

die auf den ersten sieht gut aus, aber es stürzt ab, für Spalten ohne ‚/‘, wie ‚abc‘.

Was kann ich noch versuchen?

Antwort

1

Verwenden str.split mit dem Parameter expand=True für die Rückkehr DataFrame:

main_tbl[['name','ver']] = main_tbl.application.str.split('/', expand=True) 
print (main_tbl) 
    application name ver 
0 blah/3.14 blah 3.14 
1  xyz/5.2 xyz 5.2 
2   abc abc None 

Und wenn Bedarf NaN s hinzufügen replace:

main_tbl.ver = main_tbl.ver.replace({None:np.nan}) 
print (main_tbl) 
    application name ver 
0 blah/3.14 blah 3.14 
1  xyz/5.2 xyz 5.2 
2   abc abc NaN 
+0

Brilliant, danke! Ich musste nur '1' in Split hinzufügen, um Eckfälle abzudecken (z. B. einige Werte, die mit einem Schrägstrich beginnen) '.split ('/', 1, expand = True)'. Falls es anderen hilft. – SloppyPenguin

Verwandte Themen