2017-12-23 5 views
1

Ich habe einen Datenrahmen wie folgt aus:Pandas Split und wählen Sie das zweite Element

item_id 
26--_-23 
24--_-65 
12 
24--_-54 
24 
66 
23 

Wenn ich sage

df['item_id'] = df['item_id'].map(lambda x: x.split('--_-')[0]) 

ich:

item_id 
26 
24 
12 
24 
24 
66 
23 

Welche Ordnung ist. Aber , wenn ich sage:

df['par_id'] = df['item_id'].map(lambda x: x.split('--_-')[1]) 

Ich erhalte die folgende Fehlermeldung:

df2['item_id'] = df2['item_id'].map(lambda x: x.split('--_-')[1]) 
IndexError: list index out of range 

Dann entschied ich mich, um zu versuchen:

def split(x): 
    try: z = x.split('--_-')[1] 
    except: z = None 
df2['par_id'] = df2['item_id'].apply(split) 

Aber in diesem Fall, erhalte ich eine leere PAR_ID Spalte Ich weiß, es ist wahrscheinlich eine sehr triviale Frage, aber was ist das Problem hier?

Antwort

1

Sie Pandas Funktion str.split und wählen Sie Listen von Positionen von str verwenden können - wenn Werte nicht NaN s existieren erhalten:

df['item_id'] = df['item_id'].str.split('--_-').str[1] 
print (df) 
    item_id 
0  23 
1  65 
2  NaN 
3  54 
4  NaN 
5  NaN 
6  NaN 

Detail:

print (df['item_id'].str.split('--_-')) 
0 [26, 23] 
1 [24, 65] 
2  [12] 
3 [24, 54] 
4  [24] 
5  [66] 
6  [23] 
Name: item_id, dtype: object 
Verwandte Themen