从熊猫数据框中的单个单元格检索值时出错

时间:2020-04-01 22:29:28

标签: python pandas dataframe

我有一个带有1行的pandas数据框,我试图从某些列中提取值以进行计算,错误:TypeError:'NoneType'对象不可下标

添加失败的地方-**

代码:

result = []
for kur, knb, bm_pp, zzavcurr, wa, datefrom, dateto in zip(df.kur, df.knb, df.bm_pp, df.zzavcurr, df.wa, df.datefrom, df.dateto):
    if kur == knb:
        result.append(bm_pp)
    elif kur != knb and wa == "HUF":
        result.append(bm_pp)
    elif kur != knb and wa in ("SEK", "DKK", "MXN"):
        result.append(bm_pp)
    elif kur != knb and knb == 'IA' and wa not in ("SEK", "DKK", "MXN", "USD", "HUF"):
        df = getExchangeRate(ctx, knb, wa, bm_pp, zzavcurr, datefrom, dateto, dfTC)
        ** bm_pp_usd_off = df['bm_pp'].values[0] / df['zzavcurr'].values[0]
        bm_pp_c_new = bm_pp_usd_off / df['ukurs'].values[0]
        result.append(bm_pp_c_new)
    else:
        result.append("Fail")
df["bm_pp_c_new"] = result

def getExchangeRate(ctx, knvv_kurst, waers, bm_pp, zzavcurr, datefrom, dateto, dfTC):
if datefrom == dateto:
    data = [[knb, wa, bm_pp, zzavcurr, datefrom, dateto]]
    df_BA = pd.DataFrame(data, columns=['knb', 'wa', 'bm_pp', 'zzavcurr', 'datefrom', 'dateto'])
    dfBA = ctx.spark_session.createDataFrame(df_BA)
    dfR = dfBA.join(dfTC, (dfBA.knb == dfTC.kur_TC) & (dfBA.wa == dfTC.fcurr) & ('USD' == dfTC.tcurr) & (dfBA.datefrom == dfTC.gdatu), how='left')
    df = dfR.toPandas()
    return (df)
else:
    data = [[knb, wa, bm_pp, zzavcurr, datefrom, dateto]]
    df_BA = pd.DataFrame(data, columns=['knb', 'wa', 'bm_pp', 'zzavcurr', 'datefrom', 'dateto'])
    dfBA = ctx.spark_session.createDataFrame(df_BA)
    dfR = dfBA.join(dfTC, (dfBA.knb == dfTC.kur_TC) & (dfBA.wa == dfTC.fcurr) & ('USD' == dfTC.tcurr) & (dfBA.datefrom == dfTC.gdatu), how='left')
    df = dfR.toPandas()
    return (df)

数据框:

enter image description here

头:

行(knb ='IATA',wa ='EUR',bm_pp = 1.08084,zzavcurr = 1926.13,datefrom = datetime.date(2020,2,1),dateto = datetime.date(2020,2,1) ,kur ='IATA',fcurr ='EUR',tcurr ='USD',gdatu = datetime.date(2020,2,1),ukurs = -0.90202)

1 个答案:

答案 0 :(得分:1)

此代码在pandas 1.0.1中对我有效。计算中是否使用了df列数字数据类型?你在某处有错字吗?

df = pd.DataFrame({'bm_pp':[1.0808], 'zzavcurr': [1926.1], 'ukurs':[-0.902]})

bm_pp_usd_off = df['bm_pp'].values[0] / df['zzavcurr'].values[0]

bm_pp_c_new = bm_pp_usd_off / df['ukurs'].values[0]

>>>bm_pp_c_new
-0.00062209966464868

由于计算使用标量,您是否尝试过使用.at?

df = pd.DataFrame({'bm_pp':[1.0808], 'zzavcurr': [1926.1], 'ukurs':[-0.902]})

bm_pp_usd_off = df.at[0 ,'bm_pp'] / df.at[0 ,'zzavcurr']

bm_pp_c_new = bm_pp_usd_off / df.at[0 ,'ukurs']

>>>bm_pp_c_new
-0.00062209966464868