web-dev-qa-db-fra.com

Pandon Python: les valeurs négatives du filtre DataFrame

Je me demandais comment je pouvais supprimer tous les index contenant des valeurs négatives dans leur colonne. J'utilise des pandas DataFrames

Documentation Pandas DataFrame

Format:

Myid - valuecol1 - valuecol2 - valuecol3 -... valuecol30

Donc, ma DataFrame s'appelle data

Je sais comment faire cela pour 1 colonne:

data2 = data.index[data['valuecol1'] > 0]
data3 = data.ix[data3]

Donc, je n’obtiens que les identifiants où valuecol1 > 0, comment puis-je faire une sorte d’instruction and?

valuecol1 && valuecol2 && valuecol3 && ... && valuecol30 > 0

11
zer02

Vous pouvez faire une boucle sur les noms de colonne

for cols in data.columns.tolist()[1:]:
    data = data.ix[data[cols] > 0]
5
gobrewers14

Vous pouvez utiliser all pour vérifier si une ligne ou une colonne entière est vraie:

In [11]: df = pd.DataFrame(np.random.randn(10, 3))

In [12]: df
Out[12]:
          0         1         2
0 -1.003735  0.792479  0.787538
1 -2.056750 -1.508980  0.676378
2  1.355528  0.307063  0.369505
3  1.201093  0.994041 -1.169323
4 -0.305359  0.044360 -0.085346
5 -0.684149 -0.482129 -0.598155
6  1.795011  1.231198 -0.465683
7 -0.632216 -0.075575  0.812735
8 -0.479523 -1.900072 -0.966430
9 -1.441645 -1.189408  1.338681

In [13]: (df > 0).all(1)
Out[13]:
0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
8    False
9    False
dtype: bool

In [14]: df[(df > 0).all(1)]
Out[14]:
          0         1         2
2  1.355528  0.307063  0.369505

Si vous souhaitez uniquement examiner un sous-ensemble des colonnes, par exemple, [0, 1]:

In [15]: df[(df[[0, 1]] > 0).all(1)]
Out[15]:
          0         1         2
2  1.355528  0.307063  0.369505
3  1.201093  0.994041 -1.169323
6  1.795011  1.231198 -0.465683
18
Andy Hayden

Pour utiliser des instructions dans un cadre de données, il vous suffit d'utiliser un seul caractère et de séparer chaque condition par une parenthèse.

Par exemple:

data = data[(data['col1']>0) & (data['valuecol2']>0) & (data['valuecol3']>0)]
2
Raimundo Manterola

Si vous souhaitez vérifier les valeurs d'un groupe de colonnes adjacent, par exemple de la deuxième à la dixième:

df[(df.ix[:,2:10] > 0).all(1)]

Vous pouvez également utiliser une gamme

df[(df.ix[:,range(1,10,3)] > 0).all(1)]

et une propre liste d'indices

mylist=[1,2,4,8]
df[(df.ix[:, mylist] > 0).all(1)]
1
Juan Pueyo