【问题标题】:Checking if value in pandas DataFrame series exists in excel sheets检查excel表中是否存在pandas DataFrame系列中的值
【发布时间】:2020-04-22 03:55:27
【问题描述】:

我是 Pandas 的新手。

我的数据框

df

A
Best free
best free
free
free best
best
Nokia best for free
best nokia in 2020
best streaming platform for free
free streaming platform in 2020 for nokia phone
streaming for free Canada
...

我的 excel 文件 = file, file.Word 表示我对名为“Word”的文件和查看表感兴趣

file.ContainsBest

meilleur
beste
mejor
best
...

file.ContainsFree

gratuit
kostenlos
gratis
free
...

我想要的数据框

df

A                                                   Contains Best   Contains Free
Best free                                           True            True
best free                                           True            True
free                                                False           True
free best                                           True            True
best                                                True            False
Nokia best for free                                 True            True
best nokia in 2020                                  True            False
best streaming platform for free                    True            True
free streaming platform in 2020 for nokia phone     False           True
streaming for free Canada                           False           False
...                                                 ...             ...

Excel file 将用作过滤器,我可以通过添加或减去来自不同工作表的单词来修改它,它将充当确定新 DataFrame 列是否包含 TrueFalse 值的源。

到目前为止我已经尝试过:

file = pd.read_excel('config_values.xlsx')
print(file)

它打印出预期的第一个工作表值,一旦我添加sheet_name='ContainsBest',它就会抛出这个错误:

xlrd.biffh.XLRDError: No sheet named <'ContainsBest'>

但它确实会使用以下代码打开选定的工作表:

file = pd.read_excel(open('config_values.xlsx', 'rb'),
                     sheet_name='ContainsFree')
print(file)

这是否意味着pd.read_excel(open... 不能用于打开具有名称的第一张工作表?

所以我的问题可以分为两部分:

  1. 使用带有工作表的 excel 文件从其中的不同工作表中读取的正确方法
  2. 添加列并检查工作表中的值是否存在于其中的最佳方法是什么?使用.isin() 还是有更好的选择?

编辑 我可以使用:

df['Contains Free'] = df.Search_Query.str.contains('free', regex=True)

效果很好,但如果我像这样通过file

file = pd.read_excel(open('config_values.xlsx', 'rb'),
                     sheet_name='ContainsFree')
df['Contains Free'] = df.Search_Query.str.contains(file, regex=True)

我收到此错误:

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

感谢您的建议。

【问题讨论】:

  • 这个之前的回答有帮助吗:stackoverflow.com/questions/29700552/… ?
  • 抱歉没有,我是 python 新手。我的意思是我没有尝试更改数据框,那么为什么它会抛出一个不可哈希的错误。

标签: python excel pandas dataframe


【解决方案1】:

最终使用了这个解决方案:

containsFree = pd.read_excel('config_values.xlsx',
                             sheet_name='ContainsFree', header=None)
containsFree = '|'.join(containsFree[0])
df['ContainsFree'] = df.SearchQuery.str.contains(
    containsFree, regex=True, flags=re.IGNORECASE)

我在每个 Excel 表中都使用了相同的代码。但是,对于第一个工作表,您不需要传递工作表名称,即使它是正确的,只需传递不带名称的文件:

containsbest = pd.read_excel('config_values.xlsx', header=None)
containsbest = '|'.join(containsbest[0])
df['Containsbest'] = df.SearchQuery.str.contains(
    containsbest, regex=True, flags=re.IGNORECASE)

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 2020-09-07
    • 2019-02-22
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2022-12-31
    • 2013-08-01
    相关资源
    最近更新 更多