Почему я получаю неоднозначные ошибки правды? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть вложенный словарь, в котором я достигаю трех уровней, чтобы вытащить значение, основанное на ключах, соответствующих столбцам в моем фрейме данных. Ниже приведен код, который я использую.

columns = df.columns
for column in columns:
    for k1, v1 in model_4_factors.items():
        for k2, v2 in v1.items():
            for k3, v3 in v2.items():
                #print(k3)
                if k2 == df['RATING_CLASS_CODE'] and k3 == df['unit_value_factors']:
                    print(k3)

Я продолжаю получать это значение ошибки, и я не уверен, почему:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-258-ab68e28884a4> in <module>
      5             for k3, v3 in v2.items():
      6                 #print(k3)
----> 7                 if k2 == df['RATING_CLASS_CODE'] and k3 == df['unit_value_factors']:
      8                     print(k3)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1574         raise ValueError("The truth value of a {0} is ambiguous. "
   1575                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1576                          .format(self.__class__.__name__))
   1577 
   1578     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Я пытался использовать iteritems(), и он говорит мне, что dict не имеет функции iteritems(). Когда я вынимаю оператор if == и просто заставляю python выводить разные уровни k и v, это работает, поэтому я знаю, что мои вложенные циклы верны. Есть идеи?

1 Ответ

0 голосов
/ 17 июня 2019

Я понял это.Я перешел на iterrow заявление.Однако это очень медленно.

for index, row in df.iterrows():
    for k1, v1 in model_4_factors.items():
        for k2, v2 in v1.items():
            if isinstance(v2, dict):
                for k3, v3 in v2.items():
                    if k2 == row['RATING_CLASS_CODE'] and k3 == row['unit_value_model']:
                        df['value_factor_4'] = v3
                    elif k2 == row['RATING_CLASS_CODE'] and k3 == row['MVEH_CC_Model']:
                        df['cc_factor_4'] = v3
                    elif k2 == row['term_model'] and k3 == row['advanced_purchase_days_model']:
                        df['advanced_days_factor_4'] = v3
                    elif k2 == row['marital_status_model'] and k3 == row['Driver_Age_model']:
                        df['driver_age_factor_4'] = v3
                    else:
                        df['value_factor_4'] = None

            else:
                if row['mveh_pkg_typ_cd'] == k2:
                    df['mveh_pkg_typ_cd_factor_4'] = v2

                elif row['CLded'] == k2:
                    df['CLded_factor_4'] = v2

                elif row['unit_drv_exp_model'] == k2:
                    df['unit_drv_exp_model'] = v2

                elif row['v_age_model'] == k2:
                    df['v_age_model_factor_4'] = v2

                elif row['years_owned_model'] == k2:
                    df['years_owned_model_factor_4'] = v2

                elif row['FIN_RESP_CD'] == k2:
                    df['FIN_RESP_CD_factor_4'] = v2

                elif row['st_ad_moto_safety_course'] == k2:
                    df['st_ad_moto_safety_course_factor_4'] = v2

                elif row['st_ai_instructor_course'] == k2:
                    df['st_ai_instructor_course_factor_4'] = v2

                elif row['st_ci_instructor_course'] == k2:
                    df['st_ci_instructor_course_factor_4'] = v2

                elif row['st_mf_moto_safety_course '] == k2:
                    df['st_mf_moto_safety_course_factor_4'] = v2

                elif row['st_mi_instructor_course'] == k2:
                    df['st_mi_instructor_course_factor_4'] = v2

                elif row['st_mc_moto_safety_course'] == k2:
                    df['st_mc_moto_safety_course_factor_4'] = v2

                elif row['st_rc_moto_safety_course'] == k2:
                    df['st_rc_moto_safety_course_factor_4'] = v2

                elif row['st_ri_instructor_course'] == k2:
                    df['st_ri_instructor_course_factor_4'] = v2

                elif row['ds_pn_prior_insurance'] == k2:
                    df['ds_pn_prior_insurance_factor_4'] = v2

                elif row['st_rc_moto_safety_course'] == k2:
                    df['st_rc_moto_safety_course_factor_4'] = v2

                elif row['Loyalty'] == k2:
                    df['Loyalty_factor_4'] = v2

                elif row['ds_mc_motorcycle_endorsement'] == k2:
                    df['ds_mc_motorcycle_endorsement_factor_4'] = v2

                elif row['multi_unit_model2'] == k2:
                    df['multi_unit_model2_factor_4'] = v2

                elif row['ds_ad_affinity'] == k2:
                    df['ds_ad_affinity_factor_4'] = v2

                elif row['ds_ak_alliance'] == k2:
                    df['ds_ak_alliance_factor_4'] = v2

                elif row['multi_policy_count_model'] == k2:
                    df['multi_policy_count_model_factor_4'] = v2

                elif row['ds_fp_paid_in_full'] == k2:
                    df['ds_fp_paid_in_full_factor_4'] = v2

                else:
                    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...