2017-11-03 1 views
1

Also ich einen Datenrahmen haben, die bestimmte Werte von ausgewählten ive:Verwenden Liste der Index eine Teilmenge erzeugen df

x=df[df['column'].str.contains('foo')].index

wenn ich dann eine neue df mit den ausgewählten indexs aus dem ursprünglichen df machen wollen von: df2=df[x], die folgende Meldung erscheint:

KeyError: "Int64Index([ 48, 64, 98, 118, 120, 128, 138, 144, 151,\n 166,\n ...\n 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, 15900,\n 15901],\n dtype='int64', length=4711) not in index"

diese indexs sind in den Datenrahmen als df.iloc[48] liefert einen Wert

Wer hat irgendwelche Ideen?

+1

Notwendigkeit 'df2 = df.loc [ x] ' – jezrael

+0

Prost Mate, das hat es aussortiert. –

Antwort

2

Ich glaube, Sie brauchen loc - wählen durch Indexwerte:

x=df.index[df['column'].str.contains('foo')] 

df2=df.loc[x] 
#if default monotonic index - 0,1,..., len(df) - 1 
#df2=df.iloc[x] 

Probe:

df = pd.DataFrame({'A':list('abcdef'), 
        'B':[4,5,4,5,5,4], 
        'C':[7,8,9,4,2,3], 
        'D':[1,3,5,7,1,0], 
        'E':[5,3,6,9,2,4], 
        'F':list('aaabbb')}) 

print (df) 
    A B C D E F 
0 a 4 7 1 5 a 
1 b 5 8 3 3 a 
2 c 4 9 5 6 a 
3 d 5 4 7 9 b 
4 e 5 2 1 2 b 
5 f 4 3 0 4 b 

x=df.index[df['F'].str.contains('b')] 
print (x) 
Int64Index([3, 4, 5], dtype='int64') 

df2=df.loc[x] 
print (df2) 
    A B C D E F 
3 d 5 4 7 9 b 
4 e 5 2 1 2 b 
5 f 4 3 0 4 b 

Einfachere ist nur verwenden:

df2=df[df['F'].str.contains('b')] 
print (df2) 

    A B C D E F 
3 d 5 4 7 9 b 
4 e 5 2 1 2 b 
5 f 4 3 0 4 b 
Verwandte Themen