gpt4 book ai didi

python - 按索引名称过滤数据框行

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:26 25 4
gpt4 key购买 nike

我有一个 DataFrame,我想在其中根据索引名称删除元素

               col1  col2
entry_1 10 11
entry_2_test 12 13
entry_3 14 15
entry_4_test 16 17

基本上我想删除以_test结尾的那些

我知道如何选择它们:

df.filter(like='_test', axis=0)

col1 col2
entry_2_test 12 13
entry_4_test 16 17

然后我实际上可以获得那些索引:

df.filter(like='_test', axis=0).index

entry_2_test
entry_4_test

最后我可以删除这些索引并用过滤后的数据覆盖我的数据框。

df = df.drop(df.filter(like='_test', axis=0).index)
df

col1 col2
entry_1 10 11
entry_3 14 15

我的问题是这是过滤的正确方法还是有更高效的专用函数来执行此操作?

最佳答案

您可以反转 str.endswith 的结果:

In[13]:
df.loc[~df.index.str.endswith('_test')]

Out[13]:
col1 col2
entry_1 10 11
entry_3 14 15

或者将最后 5 个字符切分并使用 != 进行比较:

In[13]:
df.loc[df.index.str[-5:]!='_test']

Out[18]:
col1 col2
entry_1 10 11
entry_3 14 15

仍然可以通过传递正则表达式模式来使用 filter 来过滤掉不以 '_test' 结尾的行:

In[25]:
df.filter(regex='.*[^_test]$', axis=0)

Out[25]:
col1 col2
entry_1 10 11
entry_3 14 15

正如@user3483203 所指出的,最好使用以下正则表达式:

df.filter(regex='.*(?<!_test)$', axis=0)

关于python - 按索引名称过滤数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51730121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com