繁体   English   中英

检查 excel 表中是否存在 Pandas DataFrame 系列中的值

[英]Checking if value in pandas DataFrame series exists in excel sheets

我是熊猫的新手。

我的数据框

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 , 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... ca pd.read_excel(open... be used to open the first sheet with a name?

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

  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

谢谢你的建议。

最终使用此解决方案:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM