2017-09-08 14 views
1

Es ist vielleicht nicht die klügste Frage überhaupt, aber ich weiß nicht, warum die übliche Split-Funktion leere Zellen in Pandas zurückgibt. Hier sind die paar Dinge, die ich versucht habe: Erstens:Pandas Split funktioniert nicht

import pandas as pd 
import pickle 
df1 = pd.read_pickle('output.p') 
try: 
    df1['being_remixed'] = df1['file_names'].str.map(lambda x: x.split('by')[1]) # Also tried without str 
except: 
    df1['being_remixed'] = "" 

Zweitens:

def splitter(z): 
    try: 
     a = z.map(lambda x: x.split('by')[1]) 
    except: 
     a = "" 
    return a 
df1['being_remixed'] = df1['file_names'].apply(splitter) 

Und Saiten auf der dateinamen Spalte wie folgt aussehen: „StrandbeestInspiredWalkingMachinebydanowall --- -1043007 .jpg "oder " DetailedAlienHead --- -1913632.jpg " Wenn ich mit" ---_- "teile, funktioniert es. Wie könnte ich mein Problem lösen?

Antwort

3

Sie benötigen str.split für Liste von Strings mit indexing with str für ausgewählten zweiten Wert jeder Liste, wenn eine Artikelliste es NaN zurückkehren, so fillna notwendig:

df1['being_remixed'] = df1['file_names'].str.split('by').str[1].fillna('') 

Probe:

df1 = pd.DataFrame({'file_names':['WalkingMachinebydanowall----1043007.jpg', 
            'DetailedAlienHead----1913632.jpg']}) 

print (df1) 
           file_names 
0 WalkingMachinebydanowall----1043007.jpg 
1   DetailedAlienHead----1913632.jpg 

df1['being_remixed'] = df1['file_names'].str.split('by').str[1].fillna('') 

print (df1) 
           file_names   being_remixed 
0 WalkingMachinebydanowall----1043007.jpg danowall----1043007.jpg 
1   DetailedAlienHead----1913632.jpg       

Erläuterung:

print (df1['file_names'].str.split('by')) 
0 [WalkingMachine, danowall----1043007.jpg] 
1   [DetailedAlienHead----1913632.jpg] 
Name: file_names, dtype: object 

print (df1['file_names'].str.split('by').str[1]) 
0 danowall----1043007.jpg 
1      NaN 
Name: file_names, dtype: object 
+1

Mein Goodnes s, warum str am Ende macht den Trick? –