【问题标题】:How do I search if a value is inside the data frame如何搜索值是否在数据框中
【发布时间】:2018-11-25 02:52:11
【问题描述】:

我有两个名为 master_registry.csv 和 master_reference.csv 的 CSV 文件。通过使用这些 CSV,我创建了一些名为“df”和“df2”的新数据框。通过组合这些“df”和“df2”数据框,我创建了一个名为“new_df”的新数据框。问题是我想在这个“new_df”数据框中找到一个值。但是当我试图得到结果时它给了我一个错误。

这是代码

    # reading csv from the directory
    df = pd.read_csv('application/master_registry.csv')
    df2 = pd.read_csv('application/master_reference.csv')

    # filtering some selected columns form the csv
    df = df.filter(items=['Master_ID', 'Provider First Name', 'Provider Middle Name', 'Provider Last Name (Legal Name)', 'Provider Credential Text', 'Provider Gender Code','Provider License Number State Code_1',
                    'Provider Business Practice Location Address City Name'])

    # creating new data frame with "full name" column
    df['Full_Name'] = df[['Provider First Name', 'Provider Last Name (Legal Name)']].apply(lambda x: ' '.join(x), axis=1)

    new_df = df.set_index('Master_ID').join(df2.set_index('Master_ID'))

    # selecting rows according to the external values
    main = new_df[(new_df['Master_ID']==master_id)]
    print(main.values.tolist())

当我尝试上面的代码时,它给了我这个错误。

C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\pandas\core\ops.py:1164: FutureWarning:元素比较失败;返回标量 相反,但将来会执行元素比较 结果 = 方法(y) [2018-06-15 14:36:07,148] 应用程序中的错误:/search/manual/results/by_npi [POST] 上的异常 回溯(最近一次通话最后): 文件 "C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask\app.py", 第 2292 行,在 wsgi_app 中 响应 = self.full_dispatch_request() 文件 "C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask\app.py", 第 1815 行,在 full_dispatch_request 中 rv = self.handle_user_exception(e) 文件 "C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask\app.py", 第 1718 行,在 handle_user_exception 中 reraise(exc_type, exc_value, tb) 文件“C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask_compat.py”, 第 35 行,在再加注中 升值 文件 "C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask\app.py", 第 1813 行,在 full_dispatch_request 中 rv = self.dispatch_request() 文件 "C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\flask\app.py", 第 1799 行,在 dispatch_request 中 返回 self.view_functionsrule.endpoint 文件“C:\Users\ChampsoftWK26\Desktop\Jericho_v0.0.7\application\routes.py”, 第 41 行,在 search_manual_results_by_npi 信息 = hub.process_search_by_npi(npi) 文件 "C:\Users\ChampsoftWK26\Desktop\Jericho_v0.0.7\application\hub.py", 第 152 行,在 process_search_by_npi 打印(new_df['Client_Reference_ID']==npi) 文件“C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\pandas\core\ops.py”, 第 1253 行,在包装器中 res = na_op(值,其他) 文件“C:\Users\ChampsoftWK26\Envs\jerich_core\lib\site-packages\pandas\core\ops.py”, 第 1166 行,在 na_op raise TypeError("无效类型比较") TypeError:无效的类型比较 127.0.0.1 - - [15/Jun/2018 14:36:07] “POST /search/manual/results/by_npi HTTP/1.1”500 -

new_df是这样的

             Provider First Name         ...         Client_Reference_ID
Master_ID                             ...                            
1                     WILLIAM         ...                  1588667638
2                     RICHARD         ...                  1114920261
3                   FRANCISCO         ...                  1861495814
4                        ERIC         ...                  1306849336
5                     RICHARD         ...                  1326041476
6                      GHAITH         ...                  1770586828
7                      TREVOR         ...                  1124021274

【问题讨论】:

  • 你能提供一个 new_df 的样本和预期的输出吗?
  • 哪一行给出了错误?
  • 我认为这是给我错误的行
  • main = new_df[(new_df['Master_ID']==master_id)]
  • 那么我如何将一些值与索引进行比较

标签: python pandas csv


【解决方案1】:

你需要按索引获取行,试试下面的方法:

 main = new_df.loc[[master_id]]

例如

new_df.loc[[2]]

返回

             Provider First Name     Client_Reference_ID
Master_ID                                                      
2                 RICHARD                 1114920261

【讨论】:

    【解决方案2】:

    看来Master_ID 是您的索引。在这种情况下,这应该有效:

    'your id' in new_df.index
    

    如果索引存在,则给出truefalse

    或将其转换为列,然后继续执行您的代码:

    new_df['Master_ID'] = df.index
    main = new_df[(new_df['Master_ID']==master_id)]
    

    【讨论】:

    • 我同意,但他没有解释输出是什么,所以我只是猜测。以同样的方式我猜测它是索引
    • 您确定 master_id 是列而不是索引吗?
    • 是的,然后:new_df = df.set_index('Master_ID').join(df2.set_index('Master_ID'))。无论如何不要在cmets中讨论。如果您有更好的解决方案,请发布:) 我认为@Isma 的解决方案无论如何都很好
    • @roganjosh 没有挑衅的意愿,只是学习和提高技能和答案:)
    • “Thrown me”是一种口语,我的意思是“你提出了一个很好的观点,但却混淆了我试图提出的观点”。没什么挑衅的:)我很快就会清理我的cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2014-11-07
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多