2015-01-31 10 views
8

Nicht ganz sicher, warum ich das nicht herausfinden kann. Ich suche einen Pandas-Datenrahmen unter Verwendung von Indexnummern. Ich habe eine Liste/Kernindex mit den Indexnummern, die ich nicht brauche, unterwählen Pandas Reihen durch ausschließende Indexnummer

gezeigt
pandas.core.index.Int64Index 

Int64Index([2340, 4840, 3163, 1597, 491 , 5010, 911 , 3085, 5486, 5475, 1417, 2663, 4204, 156 , 5058, 1990, 3200, 1218, 3280, 793 , 824 , 3625, 1726, 1971, 2845, 4668, 2973, 3039, 376 , 4394, 3749, 1610, 3892, 2527, 324 , 5245, 696 , 1239, 4601, 3219, 5138, 4832, 4762, 1256, 4437, 2475, 3732, 4063, 1193], dtype=int64) 

Wie kann ich einen neuen Datenrahmen ohne diese Indexzahlen erstellen. Ich habe versucht,

df.iloc[combined_index] 

und offensichtlich dies zeigt nur die Zeilen mit dieser Indexnummer (das Gegenteil von dem, was ich will). Jede Hilfe wird sehr geschätzt

+0

Möchten Sie die Zeilen mit diesen * Indizes * oder die Zeilen mit diesen * Positionen * entfernen? 'iloc' wird verwendet, wenn Sie sich mehr um die Orte kümmern (Sie möchten sich auf die 5. Zeile beziehen, sagen wir, unabhängig vom Index). – DSM

Antwort

18

nicht sicher, ob das, was Sie suchen, dieses Posting als Antwort, weil es zu lang für einen Kommentar ist:

In [31]: d = {'a':[1,2,3,4,5,6], 'b':[1,2,3,4,5,6]} 

In [32]: df = pd.DataFrame(d) 

In [33]: bad_df = df.index.isin([3,5]) 

In [34]: df[~bad_df] 
Out[34]: 
    a b 
0 1 1 
1 2 2 
2 3 3 
4 5 5 

In [35]: 
+0

Funktioniert das für numpy? Ich vermute nicht, weil ~ [2,1] zum Beispiel [-3, -2] ist. Wenn also X ein np-Array ist, sind X [ix] und X [~ ix] nicht 'komplementär' wie bei Pandas. – user86895

3

Sie könnten pd.Int64Index(np.arange(len(df))).difference(index) verwenden, um einen neuen Ordnungsindex zu bilden. Zum Beispiel, wenn wir wollen, um die Zeilen zu entfernen, mit Ordnungsindex zugeordnet [1,3,5], dann

import numpy as np 
import pandas as pd 

index = pd.Int64Index([1,3,5], dtype=np.int64) 
df = pd.DataFrame(np.arange(6*2).reshape((6,2)), index=list('ABCDEF')) 
#  0 1 
# A 0 1 
# B 2 3 
# C 4 5 
# D 6 7 
# E 8 9 
# F 10 11 

new_index = pd.Int64Index(np.arange(len(df))).difference(index) 
print(df.iloc[new_index]) 

ergibt

0 1 
A 0 1 
C 4 5 
E 8 9 
Verwandte Themen