[英]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.