определяя, содержит ли DataFrame определенные ключевые слова строки и получает свое местоположение [дубликат]

fn буквально относится к jquery prototype.

Эта строка кода находится в исходном коде:

jQuery.fn = jQuery.prototype = {
 //list of functions available to the jQuery api
}

Но реальный инструмент позади fn это его доступность для подключения ваших собственных функций в jQuery. Помните, что jquery будет родительской областью для вашей функции, поэтому this будет ссылаться на объект jquery.

$.fn.myExtension = function(){
 var currentjQueryObject = this;
 //work with currentObject
 return this;//you can include this if you would like to support chaining
};

Итак, вот простой пример этого. Предположим, что я хочу сделать два расширения, один из которых помещает синюю границу, и которая окрашивает текст синим цветом, и я хочу, чтобы они были прикованы.

jsFiddle Demo

$.fn.blueBorder = function(){
 this.each(function(){
  $(this).css("border","solid blue 2px");
 });
 return this;
};
$.fn.blueText = function(){
 this.each(function(){
  $(this).css("color","blue");
 });
 return this;
};

Теперь вы можете использовать их против класса следующим образом:

$('.blue').blueBorder().blueText();

(я знаю, что это лучше всего делать с css, например, с применением разных имен классов, но имейте в виду, что это просто демоверсия, чтобы показать концепцию).

Этот ответ имеет хороший пример полноценного расширения.

56
задан Air 16 January 2015 в 00:54
поделиться

4 ответа

In [3]: df[df['ids'].str.contains("ball")]
Out[3]:
     ids  vals
0  aball     1
1  bball     2
3  fball     4
105
ответ дан Amit 15 August 2018 в 15:26
поделиться

Если вы хотите установить столбец, на который вы фильтруете новый индекс, вы также можете использовать .filter ; если вы хотите сохранить его как отдельный столбец, тогда str.contains - путь.

Допустим, у вас есть

df = pd.DataFrame({'vals': [1, 2, 3, 4, 5], 'ids': [u'aball', u'bball', u'cnut', u'fball', 'ballxyz']})

       ids  vals
0    aball     1
1    bball     2
2     cnut     3
3    fball     4
4  ballxyz     5

, и ваш план состоит в том, чтобы отфильтровать все строки в который ids содержит ball и устанавливает ids в качестве нового индекса, вы можете сделать

df.set_index('ids').filter(like='ball', axis=0)

, который дает

         vals
ids          
aball       1
bball       2
fball       4
ballxyz     5

Но filter также позволяет вам передайте регулярное выражение, чтобы вы могли также фильтровать только те строки, где запись столбца заканчивается на ball. В этом случае вы используете

df.set_index('ids').filter(regex='ball$', axis=0)

       vals
ids        
aball     1
bball     2
fball     4

. Обратите внимание, что теперь запись с ballxyz не включается, поскольку она начинается с ball и не заканчивается им.

Если вы хотите получить все записи, начинающиеся с ball, вы можете просто использовать

df.set_index('ids').filter(regex='^ball', axis=0)

, давая

         vals
ids          
ballxyz     5

То же самое работает с столбцами; все, что вам нужно изменить, это axis=0. Если вы фильтруете на основе столбцов, это будет axis=1.

5
ответ дан Cleb 15 August 2018 в 15:26
поделиться
df[df['ids'].str.contains('ball', na = False)] # valid for (at least) pandas version 0.17.1

Пошаговое объяснение (от внутреннего к внешнему):

  • df['ids'] выбирает столбец ids кадра данных (в принципе, объект df[ids] имеет тип pandas.Series)
  • df['ids'].str позволяет применять векторизованные строковые методы (например, lower, contains) к серии
  • df['ids'].str.contains('ball') проверяет каждый элемент Серии относительно того, имеет ли значение элемента строку «шарик» в качестве подстроки. Результатом является серия булевых, указывающая True или False о существовании подстроки «шарик».
  • df[df['ids'].str.contains('ball')] применяет логическую «маску» к кадру данных и возвращает представление, содержащее соответствующие записи.
  • na = False удаляет значения NA / NaN из соображений; в противном случае может возвращаться ValueError.
38
ответ дан Jubbles 15 August 2018 в 15:26
поделиться
  • 1
    Не могли бы вы объяснить, что делает этот код и как он работает? – Kevin 16 January 2015 в 02:36
  • 2
    Как работать с частичным совпадением и захватить оставшуюся строку с частичным соответствием '#':str примерно так? – Sitz Blogz 28 June 2016 в 01:50
  • 3
    Абсолютно любите это, когда кто-то делает пошаговое объяснение. Это действительно помогает с пониманием! – user4896331 1 March 2017 в 10:49
  • 4
    И если вы замените 'ball' на '|'.join(list_of_balls), вы можете применить список строк к поиску. В то время как '|'.join(list_of_balls) создает RegEx с OR для поиска строк vaild – venti 1 September 2017 в 08:38
  • 5
>>> mask = df['ids'].str.contains('ball')    
>>> mask
0     True
1     True
2    False
3     True
Name: ids, dtype: bool

>>> df[mask]
     ids  vals
0  aball     1
1  bball     2
3  fball     4
7
ответ дан user3820991 15 August 2018 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: