python—将两列Dataframe转换为独立变量,以便直接调用

rekjcdws  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(288)

我有一个小房间 df 它由两列组成,分别包含一个说明和一个值:

description|               value|
+--------------+--------------------+
|   PED_tobacco|                 0.4|
|PED_nontobacco|                1.49|
|           GMI|    17590.8855333196|
|       CMO_NGP|             53389.0|
|             A|                80.3|
|         SC_TT|              -0.146|
|        SC_THP|              -0.056|
|       SC_ENDS|              -0.007|
|      SC_CF_PD|              -0.002|
|      SC_CF_FF|              -0.031|
|      CO2_comb|             1.23E-6|
|   CO2_lighter|2.083000000000000...|
|   Carbon_Cost|               114.0|
|     PR_SDG12A|               -0.05|
|     PR_SDG12B|               -0.01|
|       PR_SDG3|                 0.0|
|      PR_SDG14|               -0.27|
|EDEVICE_SDG12A|               -0.01|
|EDEVICE_SDG12B|               -0.05|
|  EDEVICE_SDG3|               -0.01|
+--------------+--------------------+

我一直试图找到一种方法来转换每一行,在一个独立定义的变量中,这样我就可以直接引用它。例如,我想说 PED_tobacco * 10 ,然后回来 40 .
我试着把它变成 list 字典(至少我可以用我的字典来解释) python 背景),使用:

ass_dict = df_assumptions \
    .rdd \
    .map(lambda row: {row[0]: row[1]}) \
    .collect()

# Which prints:

{'PED_tobacco': 0.4}, {'PED_nontobacco': 1.49}, {'GMI': 17590.8855333196}, {'CMO_NGP': 53389.0}, {'A': 80.3}, {'SC_TT': -0.146}, {'SC_THP': -0.056}, {'SC_ENDS': -0.007}, {'SC_CF_PD': -0.002}, {'SC_CF_FF': -0.031}, {'CO2_comb': 1.23e-06}, {'CO2_lighter': 2.0830000000000002e-08}, {'Carbon_Cost': 114.0}, {'PR_SDG12A': -0.05}, {'PR_SDG12B': -0.01}, {'PR_SDG3': 0.0}, {'PR_SDG14': -0.27}, {'EDEVICE_SDG12A': -0.01}, {'EDEVICE_SDG12B': -0.05}, {'EDEVICE_SDG3': -0.01}, {'EDEVICE_SDG14': 0.0}, {'TL_GL': 1.0}, {'TL_GR': 0.0}, {'EW_GL': 0.83}]

但是我仍然不能独立地访问每个变量。在 python 我使用以下方法:

def convert_to_var(df):
    desc = []
    val = []  

    for i,row in df.iterrows():
        desc.append(i)
        val.append(row) 

    return dict(val)

val_dict = convert_to_var(IA)
globals().update(val_dict)

在spark中有没有同样的方法?如何将每个描述值作为单独的变量直接调用?提前谢谢。

9q78igpj

9q78igpj1#

您可以合并收集的词典列表。不过,使用变量确实是个坏主意。最好直接使用字典,这是你从代码中得到的。

dict_list = df_assumptions \
    .rdd \
    .map(lambda row: {row[0]: row[1]}) \
    .collect()

val_dict = {k: v for d in dict_list for (k, v) in d.items()}
globals().update(val_dict)

# Or you can do

for d in dict_list:
    globals().update(d)

相关问题