Python Pandas: фрейм данных фильтрует отрицательные значения

#python #python-2.7 #pandas

#python #python-2.7 #pandas

Вопрос:

Мне было интересно, как я могу удалить все индексы, содержащие отрицательные значения внутри их столбца. Я использую Pandas DataFrames .

Документация Pandas DataFrame

Формат:

Myidvaluecol1valuecol2valuecol3 -… valuecol30

Итак, мой DataFrame называется data

Я знаю, как это сделать для 1 столбца:

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

Итак, я получаю только идентификаторы, где valuecol1 > 0 , как я могу сделать какое-то and утверждение?

valuecol1 amp;amp; valuecol2 amp;amp; valuecol3 amp;amp; ... amp;amp; valuecol30 > 0 ?

Комментарии:

1. что делать, если я хочу получить список имен учащихся с отрицательным результатом.

2. @NipulSindwani Попробуйте df[df["score"] < 0]["name"] , но в целом, пожалуйста, отправьте новый вопрос, если у вас есть новый вопрос.

Ответ №1:

Вы можете использовать all для проверки истинности всей строки или столбца:

 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
  

Если вы хотите просмотреть только подмножество столбцов, например [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
  

Ответ №2:

Вы можете перебирать имена столбцов

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

Ответ №3:

Чтобы использовать операторы and внутри фрейма данных, вам просто нужно использовать один символ amp; и отделять каждое условие круглыми скобками.

Например:

 data = data[(data['col1']>0) amp; (data['valuecol2']>0) amp; (data['valuecol3']>0)]
  

Ответ №4:

Если вы хотите проверить значения смежной группы столбцов, например, со второго по десятый:

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

Вы также можете использовать диапазон

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

и собственный список индексов

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