繁体   English   中英

如果列的字符串值包含特定模式,如何从 pandas 数据帧中提取整行

[英]How to extract entire rows from pandas data frame, if a column's string value contains a specific pattern

我有以下数据框,其中“名称”列的值中有一个模式“///”

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

如果列“名称”的值中包含模式“///”,我需要从该数据框中提取整行。 我尝试了以下代码,但得到了一个空的 dataframe。

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

我预期的 output 应该给我这样的数据框:

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

使用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

如果要过滤特定的一列,请使用此解决方案

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)]

Output:

   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)]

Output:

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

DataFrame有字符串 function contains()为此

 new_df = df[ df['Name'].str.contains('///') ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM