从Python pandas.DataFrame数据表中提取或删除包含指定字符串的行

有时候需要删除数据表中某一列中包含指定字符串的行,可以使用pandas的字符串包含函数.str.contains:

pd.Series.str.contains(pat, case=True, flags=0, na=None, regex=True)
#pat是搜索字符,case表示是否区分大小写,flags表示是否传递给 re 模块的标志,regex=True则pat是一个正则表达式,regex=False表示pat是一个字符串

官网详细解释链接:https://pandas.pydata.org/docs/reference/api/pandas.Series.str.contains.html?highlight=contains#pandas.Series.str.contains

示例:提取pandas dataframe中’商品名称‘列包含’手机’字符的所有数据:

#提取含有指定字符的行
df2=df[df['商品名称'].str.contains(pat='手机',regex=False)]  #regex=True则pat是一个正则表达式,regex=False表示pat是一个字符串

删除pandas dataframe中’商品名称’列包含’手机’字符的所有数据:

#删除含有指定字符的行
df2=df.drop(df[df['商品名称'].str.contains(pat='手机',regex=False)].index,inplace=True)  #regex=True则pat是一个正则表达式,regex=False表示pat是一个字符串

这个df层层嵌套有点让人眼花缭乱,实际过程是先通过df[‘商品名称’].str.contains(pat=‘手机’,regex=False)] 找到‘商品名称’列中所有包括‘手机’的行,然后通过.index得到df行索引,再通过.drop函数删除df中包括这些索引的行。

另外一种情况是在运行中遇到上面方法报错:

ValueError: cannot index with vector containing NA / NaN values

研究了好久,又是上官网,又是找CSDN其他人的资料,发现都是上面的写法,最后发现问题出在没有加一个条件判断,在是否包含字符条件语句里加上==True,程序就运行正常了,改进后的代码如下:

#删除含有指定字符的行,注意在’regex=False)’后面加了‘==True’,也就是只有包含这个字符的行才返回行索引给drop函数。
df2=df.drop(df[df['商品名称'].str.contains(pat='手机',regex=False)==True].index,inplace=True)  #regex=True则pat是一个正则表达式,regex=False表示pat是一个字符串
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值