从数据帧中的单个单元格检索值时出错

2024-09-30 10:30:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个1行的数据框,我试图从某些列中提取值来进行计算,错误: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)


Tags: anddfresultbmppusdwaappend
1条回答
网友
1楼 · 发布于 2024-09-30 10:30:57

这段代码在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

相关问题 更多 >

    热门问题