Pandas 常用的数据表行列文本字符数据查找、替换、删除函数:df.isin, str.find,str.contains,str.replace,df.drop,df.replace

经常需要从一个Python pandas数据表中查找、替换、删除含有某个或某些多个符合条件的字符的数据,常用的函数df.isin, str.find,str.contains,str.replace,df.drop,df.replace,方法总结如下:

1. 直接替换或删除含有某字符 的数据行

df.replace('$','¥',regex=False)   #表格里所有的美元符合‘$’替换成人民币符号
df.replace('$','',regex=False)   #删除表格里所有的美元符合‘$’,注意后面双引号里引号中间什么也没有
df['商品名称'].str.replace('$','¥',regex=False)   #把单列字符,注意.str函数只能用于Series或列,不能直接作用于整个DataFrame
df.drop(df[df['是否毕业']=='yes'].index,inplace=True)  #把列'是否毕业'里值为yes的行全部删掉

2. 查找、删除含有某个字符的数据:

Series.str.find(sub, start=0, end=None)
从一个Series或一列里查找字符,不能直接用于dataframe
参数:
sub: 要搜索的字符串

start: 开始搜索位置,整数值

end: 整数值,结束的搜索位置

返回值:Series 或整数索引

 #从‘标题’列里查找含有字符Food的行,如果查找到,对应行整数值为所在行索引,如果找不到,则返回整数-1
df['标题'].str.find('Food')
#结合df.drop函数删除含有‘Food’的行
new_df=df.drop(index=df[(df['标题'].str.find('Food')!=-1)].index)

另外一个类似的函数是str.contains

#查找‘商品名称’列里含有iphone的行,返回值为带行索引和False/True的Series(列),找到的行索引对应的值为True, 找不到为False。 
#regex=True则pat是一个正则表达式,regex=False表示pat是一个字符串
df[df['商品名称'].str.contains(pat='iPhone',regex=False)   

#结合drop函数可以实现批量删除
df.drop(index=df[df['商品名称'].str.contains(pat='iPhone',regex=False)==True].index,inplace=True) 

3. 批量查找、删除符合多个字符条件的数据行:

前面的字符串查找删除方法一次只能处理一个条件,但是我们经常需要查找、过滤或删除包含多个字符条件的数据,比如像在Excel里那样隐藏或显示符合条件的多行数据,那使用df.isin函数就很方便。这个函数的查找条件可以为一个列表。值得注意的是,这个函数需要查找条件跟实际值完全匹配才会返回True,比如我们查找的关键词是iphone,但是对应单元格内容是apple iphone,这时候返回值为False

DataFrame.isin(values)
参数:
values:iterable, Series, DataFrame or dict。列表、元组、系列、dataframe或字典。如果值是一个系列,那就是索引。如果值是dict,则键必须是列名,列名必须匹配。如果值是DataFrame,则索引和列标签必须匹配。

返回值:DataFrame
为True或False布尔值的 DataFrame,显示 DataFrame 中的每个元素是否包含在值中。

#查找‘关键词’列中单元格内容等于iPhone、iPad、Mac、Apple其中之一的所有行,也就是把关键词等于这些苹果产品特征值的所有行找出来
keywords=['iPhone','iPad','Mac','Apple']
df['关键词'].isin(keywords)

输出:
Pandas 常用的数据表行列文本字符数据查找、替换、删除函数:df.isin, str.find,str.contains,str.replace,df.drop,df.replace_第1张图片
结合df.drop删除这些行:

 df.drop(index= df[ df['关键词'].isin(keywords)==True].index,inplace=True)

遗憾的是,除了用for循环加str.contains()方法外,我还找不到可以批量查找和删除包含多个关键字的行的简单方法。因为df.isin()这个方法只能精确查找,不能模糊查找。应该可以使用apply 写一个lambda函数来实现。

如果你有更简单的方法,欢迎留言交流。

你可能感兴趣的:(Python,数据分析,经验分享,python,pandas)