根据字符串列的最后一个字母,使用掩码删除 Pandas df 行

Psy*_*uck 2 python mask pandas

例如,在下面有 3 行的 Pandas 数据框中,所有这些都是字符串。我想根据条件下降if str[-1] == '-':

df = pd.DataFrame({'a': ["123-","123-1","123-2"]})
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

df[df['a'][-1]=='-']
Run Code Online (Sandbox Code Playgroud)

它会返回一个错误。我知道可以用 df.apply 函数来做到这一点。但我只是想知道是否可以用面具来完成。

muz*_*zyq 7

您可以使用正则表达式创建掩码,如下所示。美元符号将确保连字符仅在字符串末尾匹配。

df.a.str.contains('-$')
Run Code Online (Sandbox Code Playgroud)

这将返回一个布尔系列。使用您的示例:

0     True
1    False
2    False
Run Code Online (Sandbox Code Playgroud)

然后,您可以像往常一样使用df.drop()以下方法删除行:

df.drop(df[df.a.str.contains('-$')].index, inplace=True)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以重置索引:

df.reset_index(inplace=True, drop=True)
Run Code Online (Sandbox Code Playgroud)