Использование str.contains () применяется к фрейму данных Pandas - PullRequest
1 голос
/ 25 сентября 2019

Я новичок в Python и Jupyter Notebook, и в настоящее время я следую этому руководству: https://www.dataquest.io/blog/jupyter-notebook-tutorial/. До сих пор я импортировал библиотеку pandas и пару других вещей, и я создал фрейм данных 'df«Это просто файл CSV данных о прибыли и выручке компании.У меня проблемы с пониманием следующей строки учебника:

non_numberic_profits = df.profit.str.contains ('[^ 0-9 .-]')

Я понимаю сутьиз того, что делает учебное пособие: определение всех компаний, чья переменная прибыли содержит строку вместо числа.Но я не понимаю смысла [^ 0-9.-] и того, как на самом деле работает вышеуказанная функция.

Мой полный код приведен ниже.Спасибо.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")

df = pd.read_csv('fortune500.csv')
df.columns = ['year', 'rank', 'company', 'revenue', 'profit']
non_numberic_profits = df.profit.str.contains('[^0-9.-]')
df.loc[non_numberic_profits].head()

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Выражение [^0-9.-] представляет собой так называемое регулярное выражение , которое представляет собой специальную текстовую строку для описания шаблона поиска.С помощью регулярных выражений (или кратко ' RegEx ') вы можете извлекать определенные части строки.Например, вы можете извлечь foo из строки 123foo456.

. В RegEx при использовании [] вы определяете диапазон символов, который должен соответствовать.Например, [bac] соответствует abc в строке abcdefg.[bac] также можно переписать как [a-c].

Используя [^], вы можете отменить диапазон символов.Таким образом, RegEx [^a-c], примененный к приведенному выше примеру, будет соответствовать defg.

Теперь вот уловка:
Поскольку ^ и - имеют особое значение при использовании в регулярных выражениях, они должны быть помещены в определенные позиции в пределах [] для буквального соответствия.В частности, если вы хотите буквально сопоставить - и хотите исключить его из диапазона символов, вы должны поместить его в крайнем правом конце из [].

Собираем все вместе
RegEx '[^0-9.-]' означает: «Совпадают все подстроки, которые не содержат цифры от 1 до 9, точку (.) или тире (-).Вы можете видеть, что ваше регулярное выражение применяется к некоторым примерным строкам здесь .

Функция pandas df.profit.str.contains('[^0-9.-]') проверяет, соответствуют ли строки в столбце profit вашего DataFrame этому RegEx и возвращает True если они это сделают и False если они этого не сделают.Результатом является панда Series, содержащая результирующие значения True / False.

1 голос
/ 25 сентября 2019

Документы Pandas - ваш друг.Первый аргумент pat по умолчанию считается регулярным выражением.Выражение r"[^0-9.-]" означает «вхождение чего-либо , кроме цифры, буквального периода полной остановки или буквального дефиса». Stack Overflow's Что означает это регулярное выражение? и регулярное выражение 101 - хорошие места для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...