Как извлечь целые строки из фрейма данных Pandas, если строковое значение столбца содержит определенный шаблон - PullRequest
0 голосов
/ 12 октября 2019

У меня есть следующий фрейм данных со столбцом «Имя» с шаблоном «///» в его значениях

data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'], ['a3','amazon', 'papaya'], 
['a4','bi///ng', 'guava']] 
df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info']) 

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

new_df = df.loc[df['Name'] == '///']

Мой ожидаемый вывод должен дать мне фрейм данных, подобный этому:

data_new = [['a2','gma///il', 'mango'],['a4','bi///ng', 'guava']] 
new_df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info'])  
print(new_df)

Ответы [ 3 ]

2 голосов
/ 12 октября 2019

Использование Series.str.contains:

import pandas as pd

data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'],
        ['a3','amazon', 'papaya'],['a4','bi///ng', 'guava']]

df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info'])

print (df[df["Name"].str.contains("///")])

#
   ID      Name   Info
1  a2  gma///il  mango
3  a4   bi///ng  guava
0 голосов
/ 12 октября 2019

DataFrame имеет строковую функцию contains() для этого

 new_df = df[ df['Name'].str.contains('///') ]
0 голосов
/ 12 октября 2019

Если вы хотите отфильтровать по периметру одного столбца, используйте это решение

import numpy as np
immport pandas as pd

data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'], ['a3','amazon', 'papaya'], 
['a4','bi///ng', 'guava']] 
df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info']) 

mask = np.column_stack([df['Name'].str.contains(r"\///", na=False)]) 
df.loc[mask.any(axis=1)]

Вывод:

   ID      Name   Info
1  a2  gma///il  mango
3  a4   bi///ng  guava

Если вам нужна фильтрация по всем столбцам для некоторого шаблона, см. Нижерешение

import numpy as np
mask = np.column_stack([df[col].str.contains(r"\///", na=False) for col in df]) 
df.loc[mask.any(axis=1)]

Вывод:

   ID      Name   Info
1  a2  gma///il  mango
3  a4   bi///ng  guava
...