Отфильтруйте данные панд по строке с регулярным выражением - PullRequest
0 голосов
/ 25 февраля 2019

Я уверен, что может быть простое решение, но я довольно плохо знаком с Python.У меня есть Pandas DataFrame со строками и значениями NaN.В этом Dataframe я хочу искать специальные части строк.Это должно быть сделано построчно, и найденные строки будут записаны в список с тем же числом строк, что и в кадре данных (это означает, что если искомая частичная строка не может быть сопоставлена ​​в строке, запись в списке должна быть'none').

Я пытался: result.loc[result[0].str.contains("hello", na=False)], но это только возвращает мне строки, в которых первый столбец содержит слово hello ...

Я думал о поиске цикла for срегулярные выражения в каждой строке:

row = df.iloc[0:100]
for item in row:
    row_dict={}
    hello = re.search(r"hello.*", item)
    if hello is None:
       hello = "NaN"

Может быть, есть и более простой способ?Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

Для целей тестирования я определил исходный DataFrame как:

df = pd.DataFrame(data=[
    ['Halo Mike', 'How are you?', np.nan],
    ['Hello John', 'Good morning', 'What a nice day'],
    ['Ello Jack', 'Xyz hello abc', np.nan]])

Как видите, есть 2 элемента, содержащих привет и 2 NaN элементы.Имена столбцов здесь не важны, поэтому я не определил их.

Первый шаг - преобразовать этот DataFrame в Series с отфильтрованными значениями NaN .:

ser = pd.Series(data=df.values.flatten()).dropna()

df.values получает базовый массив Numpy , flatten преобразует его в одномерный массив и dropna удаляет NaN значения.

Затем, чтобы получить элементы этой серии с hello внутри (без учета регистра), запустите:

ser[ser.str.contains('hello', case=False)].tolist()

В случае данных нашего теста, результат будет:

['Hello John', 'Xyz hello abc']

Я думаю, это именно то, что вы описали в своем комментарии.

Для реальных входных данных (длиннее, чем в моем примере), если вы хотите ограничить поиск только 100 исходными строками, измените df.values до df.head(100).values.

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