Python 中的 filtered_df 和 str [重复]

filtered_df and str in Python [duplicate]

提问人:user614963 提问时间:11/13/2023 更新时间:11/13/2023 访问量:34

问:

我是 Python 的新手。我正在尝试过滤数据集。过滤器似乎工作得很好,或者我认为它确实有效:)

valid_Cas = ["yut", "thj", "bnm","vfd"]
filtered_df = df[df['Cas ID'].str[-3:].isin(valid_Cas)]

但是当一个过滤器超过三个字母时,它就不起作用了,比如:

valid_Cas = ["yut", "thj", "bnm","vfd","cdret"]
filtered_df = df[df['Cas ID'].str[-3:].isin(valid_Cas)]

这是什么意思: str[-3:] ?

如何过滤超过 3 个字母?

代码是过滤“BNM5623”和“5623BNM”还是离开它?

谢谢

python 字符串

评论

0赞 John Gordon 11/13/2023
str[-3:]表示“列表中的最后三项”。
0赞 roganjosh 11/13/2023
你真的应该研究索引语法。这不仅限于熊猫。 说“从第 3 项开始,从字符串的末尾到末尾”。如果字符串为 3 个字符,则为整个字符串。如果它更长,显然不是[-3:]

答:

2赞 noah1400 11/13/2023 #1

这是什么意思: str[-3:] ?

str[-3:0]是一种切片操作,意思是“取字符串的最后 3 个字符”。例如,对于像“abcde”这样的给定字符串,将导致 . 对 DataFrame 中列的每个元素执行此切片操作。"abcde"[-3:]"cde"df['Cas ID'].str[-3:]

如何过滤超过 3 个字母?

要过滤超过 3 个字符,只需将切片操作调整为您正在寻找的所需字符串长度即可。例如,如果要按以 you 结尾的字符串进行过滤,则会使用 because 的长度为 5。'cdret'str[-5:]'cdret'

代码过滤“BNM5623”和“5623BNM”还是离开它?代码过滤“BNM5623”和“5623BNM”还是离开它?

该代码仅根据列表检查“Cas ID”列中每个条目的最后三个字符。因此,如果在您的列表中,它会识别为有效,但它不会识别为有效,因为它正在查看最后三个字符,即 .df['Cas ID'].str[-3:].isin(valid_Cas)valid_Cas'bnm5623''562''5623bnm''bnm'

若要筛选 3 个以上的字母,请将切片运算符调整为列表中最长的字符串。以下是实现此目的的方法:

valid_Cas = ["yut", "thj", "bnm", "vfd", "cdret"]
max_length = max(len(s) for s in valid_Cas)  # Find the length of the longest string in valid_Cas

# Filter based on the last characters of each string in 'Cas ID', using `max_length`
filtered_df = df[df['Cas ID'].str[-max_length:].isin(valid_Cas)]