Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在字符串条件下删除行_Python_Pandas - Fatal编程技术网

python在字符串条件下删除行

python在字符串条件下删除行,python,pandas,Python,Pandas,我有一个包含字符串和整数列的数据帧。 在其中一个包含字符串的列上,我想搜索该列的所有项以查找特定的子字符串,比如说“abc”,如果子字符串存在,则删除该行。我该怎么做?听起来很容易,但不知怎么的,我很难做到这一点。 子字符串始终是最后三个字符。 我尝试了以下方法: df1 = df.drop(df[df.Hostname[-4:]== "abc"]) 这让我 UserWarning:布尔系列键将重新编制索引以匹配数据帧 索引 因此,我尝试修改该列中的值,并过滤掉所有末尾没有“abc”的值: r

我有一个包含字符串和整数列的数据帧。 在其中一个包含字符串的列上,我想搜索该列的所有项以查找特定的子字符串,比如说“abc”,如果子字符串存在,则删除该行。我该怎么做?听起来很容易,但不知怎么的,我很难做到这一点。 子字符串始终是最后三个字符。 我尝试了以下方法:

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个字符If
abc
,然后删除行,首先提取值,然后使用:

编辑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)