首页 > 解决方案 > 在 excel 列中搜索匹配的文本值,打印行#s

问题描述

在这里,我从不同的文档中获取名称和 zip 值;并存储在变量中:(工作正常)

            Name = find_name.group(0)

然后我只想搜索我的excel文件以找到匹配项;在Name 找到文本值的地方,获取行号:

            data = pd.read_excel(config.Excel2)

            row_number = data[data['Member Name'].str.contains(Name)].index.min()
            print(row_number)

上面打印时输出不正确的行号,我不明白为什么。它不会打印在我的 excel 文档中找到匹配文本值的行。它打印一个错误的行号,与Name.

然后,我尝试过这样的事情;但这根本不输出任何东西:(输出密钥错误)

        idx = data[data['Member Name'].str.contains(Name)].index
        row_number = idx[0] if len(idx)>0 else None
        print(row_number)

关于如何实现这一目标的任何想法?

我的 excel 如下所示(大约有 11000 行,如下所示,8 列)。

          A
1 |   Member Name     | Member Address Line 1 | Member Address Line 2
    RHONDA GILBERT       ADDRESS PT 1            ADDRESS PT 2 W/ ZIP

标签: pythonregexexcelpandaspython-3.7

解决方案


我没有你的excel文件,所以我设置了以下代码:

import pandas as pd
names = ["RHONDA GILBERT", "FRED FLINTSTONE", "FRED FLINTSTONE", "BARNEY RUBLE", "RHONDA GILBERT"]
add1 = ["123 Elm St", "254 Pine Ave", "254 Pine Ave", "654 Spruce Grove", "123 Elm St"]
df = pd.DataFrame(list(zip(names, add1)), 
   columns =['Member Name', 'Member Address Line 1']) 
df

它给了我以下输出:

    Member Name     Member Address Line 1
0   RHONDA GILBERT  123 Elm St
1   FRED FLINTSTONE 254 Pine Ave
2   FRED FLINTSTONE 254 Pine Ave
3   BARNEY RUBLE    654 Spruce Grove
4   RHONDA GILBERT  123 Elm St

如果我现在搜索“FRED”,那么我会这样写:

Name = "FRED"
matches = df[df['Member Name'].str.contains(Name)]
matches

我得到的输出是这样的:

    Member Name     Member  Address Line 1
1   FRED FLINTSTONE 254 Pine Ave
2   FRED FLINTSTONE 254 Pine Ave

请注意,如果我要求我得到匹配的索引

matches.index
# outputs
Int64Index([1, 2], dtype='int64')

这些是 df 的原始索引。所以然后寻找索引的最小值

matches.index.min()
# outputs
1

这是指数中的最小值。我不太确定您的结果与上述结果有何不同。如果你想澄清,我会改变我的解释。


推荐阅读