【问题标题】:for loop over dataframe rows pandasfor 循环遍历数据框行 pandas
【发布时间】:2022-01-20 22:39:21
【问题描述】:

我有一个包含 54 列和 100000 行的数据框,我需要在 where 条件下使用行值运行 sql 查询。有没有更快的方法来实现这一点。这就是我所做的

我的代码:

    def GetTMIDCMID(ClientFileDf):
    try:
        CMCPCodedf_lst=[]
        NewColumnName = ['TCM_TM_ID','TCM_CM_ID']
        col_one_list = ClientFileDf['tradingmemberpan'].tolist()
        col_one_list = ['' if pd.isna(x) else x for x in col_one_list]
        for i in range(len(col_one_list)):
            Query="select OFF_TM_ID,OFF_CM_ID from UCIDBA.COR_OFF_VW  where  OFF_TM_PANNO ='" + col_one_list[i] +"'"
            df_CMCPCodeDF = pd.read_sql(Query, con=connection)
            df_CMCPCodeDF_lst=df_CMCPCodeDF.values.tolist()
            CMCPCodedf_lst.extend(df_CMCPCodeDF_lst)           
        CMCPCodedf=pd.DataFrame(CMCPCodedf_lst)
        CMCPCodedf.columns = NewColumnName
        return CMCPCodedf
    except Exception as ex:
        logging.exception("CollateralValidation:Utility-> GetTMIDCMID : |")   
        print(ex)  
        return False

这只是功能之一。在某些情况下,实现了多个 where 子句条件。dataframe 作为函数的参数传递。 谢谢。

【问题讨论】:

标签: python pandas


【解决方案1】:

一次性从 sql 表中获取所有值,然后将它们合并在一起,可能会获得巨大的提升,类似于:

ids_ = ClientFileDf['tradingmemberpan'].dropna().tolist()

query_ = "select OFF_TM_ID,OFF_CM_ID from UCIDBA.COR_OFF_VW  where OFF_TM_PANNO IN " + "({})".fromat(str(ids_))

df_CMCPCodeDF = pd.read_sql(Query, con=connection)

ClientFileDf.merge(df_CMCPCodeDF , on=[<MatchingKey>], how='left')

【讨论】:

猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多