python在字符串条件下删除行
我有一个包含字符串和整数列的数据帧。 在其中一个包含字符串的列上,我想搜索该列的所有项以查找特定的子字符串,比如说“abc”,如果子字符串存在,则删除该行。我该怎么做?听起来很容易,但不知怎么的,我很难做到这一点。 子字符串始终是最后三个字符。 我尝试了以下方法:python在字符串条件下删除行,python,pandas,Python,Pandas,我有一个包含字符串和整数列的数据帧。 在其中一个包含字符串的列上,我想搜索该列的所有项以查找特定的子字符串,比如说“abc”,如果子字符串存在,则删除该行。我该怎么做?听起来很容易,但不知怎么的,我很难做到这一点。 子字符串始终是最后三个字符。 我尝试了以下方法: df1 = df.drop(df[df.Hostname[-4:]== "abc"]) 这让我 UserWarning:布尔系列键将重新编制索引以匹配数据帧 索引 因此,我尝试修改该列中的值,并过滤掉所有末尾没有“abc”的值: r
df1 = df.drop(df[df.Hostname[-4:]== "abc"])
这让我
UserWarning:布尔系列键将重新编制索引以匹配数据帧
索引
因此,我尝试修改该列中的值,并过滤掉所有末尾没有“abc”的值:
red = [c for c in df.Hostname[-4:] if c != 'abc']
这让我
KeyError(“%s”不在索引“%objarr[mask]”中)
我做错了什么
谢谢你的帮助 使用,如果需要,添加检查列主机名的最后4
(3
)字符,并将条件从=
更改为=代码>:
df1 = df[df.Hostname.str[-4:] != "abc"]
或者可能:
df1 = df[df.Hostname.str[-3:] != "abc"]
样本:
df = pd.DataFrame({'Hostname':['k abc','abc','dd'],
'b':[1,2,3],
'c':[4,5,6]})
print (df)
Hostname b c
0 k abc 1 4
1 abc 2 5
2 dd 3 6
df1 = df[df.Hostname.str[-3:] != "abc"]
print (df1)
Hostname b c
2 dd 3 6
如果需要,也可以检查最后一个字符:
df1 = df[~df.Hostname.str.endswith("abc")]
print (df1)
Hostname b c
2 dd 3 6
编辑:
如果需要,请检查最后4个字符Ifabc
,然后删除行,首先提取值,然后使用:
编辑1:
对于默认索引add-python计数形式0
,因此索引值为0,1,2,…
:
df1 = df[df.Hostname.str[-3:] != "abc"].reset_index(drop=True)
伟大的谢谢你的快速回复和例子。现在我明白了!但是可能字符串中的数字有问题,如果出现问题,可能还需要df.Hostname=df.Hostname.astype(str)
。
df1 = df[df.Hostname.str[-3:] != "abc"].reset_index(drop=True)