首页 > 解决方案 > Pandas df.equals 返回 False,即使字符串为 True

问题描述

我试图在名为“匹配?”的新列中为同一数据框中的两列中的字符串返回 True 或 False。

问题是,.equals 总是返回 False,即使它应该是 True。

我尝试 运行的事情 .dtypes 将两列都显示为数据对象。将两列都转换为字符串。将两个数据帧都转换为字符串。

守则试图实现的目标和可能的线索

  1. 提取网页标题中的第一个关键字(通过从列中的列表中提取“|”之前的第一个词 - 例如关键字| 网站品牌名称.com)。
  2. 从提取的关键字末尾删除 Any 空格。
  3. 将提取的关键字转换为标题大小写,以便可以匹配。
  4. 提取的关键字与关键字列表匹配,并在新列中返回 True / False。

我的代码

# Extract First Keyword from Page Title
one_kw_page_titles['page_title_kw'] = one_kw_page_titles['Title'].str.split('|').str[0]

# Remove trailing whitespace
one_kw_page_titles['page_title_kw']=one_kw_page_titles['page_title_kw'].str.strip()

# Converts the Keyword Column into Title Case for Matching
one_kw_page_titles['Keyword'] = one_kw_page_titles['Keyword'].str.title()

# Compares ['page_title_kw] with ['Keyword] & returns True / False in a new column called ['Match']
one_kw_page_titles['Match?'] = one_kw_page_titles['page_title_kw'].equals(one_kw_page_titles['Keyword'])

如果我不得不猜测这是因为从页面标题中提取的关键字的格式(尽管它应该是一个字符串)。Excel =Exact 也正确匹配它们 - 我想我会检查以防我发疯!

谢谢你的帮助!

标签: pythonpandas

解决方案


不要使用equals,而是尝试直接使用==运算符。

例子:

import pandas as pd
df = pd.DataFrame({
    "col_1": ["a", "b", "c", "d", "c"],
    "col_2": ["a", "b", "c", "", "e"]
})

如果现在我们执行df['col_1'].equals(df['col_2'])输出 isa boolean False。相反,如果我们执行df['col_1'] == df['col_2']输出是以下熊猫系列:

0     True
1     True
2     True
3    False
4    False
dtype: bool

简要说明:

  • equals函数用于比较两个 Series 或 Dataframe 以查看它们是否具有相同的形状和元素,并返回一个布尔值
  • ==运算符比较两个系列中的每个元素,并返回一个新的布尔系列

推荐阅读