gpt4 book ai didi

Python 'str.contains' 函数没有返回正确的值

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:28 25 4
gpt4 key购买 nike

如果列与特定模式匹配,我正在尝试使用“pandas”对数据框进行子集化。以下是一个可重现的示例以供引用。

import pandas as pd

# Create Dataframe having 10 rows and 2 columns 'code' and 'URL'
df = pd.DataFrame({'code': [1,1,2,2,3,4,1,2,2,5],
'URL': ['www.abc.de','https://www.abc.fr/-de','www.abc.fr','www.abc.fr','www.abc.co.uk','www.abc.es','www.abc.de','www.abc.fr','www.abc.fr','www.abc.it']})

# Create new dataframe by filtering out all rows where the column 'code' is equal to 1
new_df = df[df['code'] == 1]

# Below is how the new dataframe looks like
print(new_df)
URL code
0 www.abc.de 1
1 https://www.abc.fr/-de 1
6 www.abc.de 1

以下是供引用的数据类型。

print(new_df.dtypes)
URL object
code int64
dtype: object

# Now I am trying to exclude all those rows where the 'URL' column does not have .de as the pattern. This should retain only the 2nd row in new_df from above output
new_df = new_df[~ new_df['URL'].str.contains(r".de", case = True)]

# Below is how the output looks like
print(new_df)
Empty DataFrame
Columns: [URL, code]
Index: []

下面是我的问题。1) 为什么我先定义了 'code' 列,但是 'URL' 列最先出现?

2) 当我试图删除“URL”列中没有模式 .de 的所有行时,我的代码有什么问题?在 R 中,我只需使用以下代码即可轻松获得所需的结果。

new_df <- new_df[grep(".de",new_df$URL, fixed = TRUE, invert = TRUE), ]

期望的输出应该如下所示。

# Desired output for new_df
URL code
https://www.abc.fr/-de 1

任何关于这方面的指导将不胜感激。

最佳答案

Why is the 'URL' column appearing first even though I defined the 'code' column first?

这是字典未排序的结果。列以任意顺序读入和创建,具体取决于 python 解释器的随机哈希初始化。


What is wrong in my code when I am trying to remove all those rows where the 'URL' column does not have the pattern .de?

您需要对 . 进行转义,因为这是一个特殊的正则表达式元字符。

df[df.code.eq(1) & ~df.URL.str.contains(r'\.de$', case=True)]

URL code
1 https://www.abc.fr/-de 1

如果 de 可以在 TLD 之后的任何地方找到(而不是在最后),这可能不会成功。这是解决该限制的通用解决方案 -

p = '''.*       # match anything, greedily  
\. # literal dot
de # "de"
(?!.* # negative lookahead
\. # literal dot (should not be found)
)'''
df[df.code.eq(1) & ~df.URL.str.contains(p, case=True, flags=re.VERBOSE)]

URL code
1 https://www.abc.fr/-de 1

关于Python 'str.contains' 函数没有返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48336175/

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