使用dict将行设为变量

2024-10-02 06:31:23 发布

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

所以,我想把[“Keterangan”]列作为一个变量。该变量取决于此数据帧中可用的每一行的名称。下面是我的数据帧示例

[In] : wokwok2
[Out]: 

    Keterangan                                               Q1 2019
0   Kas                                                     16525427.0
1   Giro pada bank indonesia                                43816214.0
2   Giro pada bank lain pihak ketiga                         8788218.0
3   Penempatan pada bank indonesia dan bank lain p...       31345793.0
4   Efek efek yang diperdagangkan pihak ketiga               5710626.0
5   Efek yang dibeli dengan janji dijual kembali            10946883.0
6   Wesel ekspor dan tagihan lainnya pihak ketiga            8551257.0
7   Cadangan kerugian penurunan nilai pada wesel e...          -7926.0
8   Tagihan akseptasi pihak ketiga                          10814986.0
9   Cadangan kerugian penurunan nilai pada tagihan...        -408769.0
10  Tagihan derivatif pihak ketiga                           1041939.0
11  Pinjaman yang diberikan pihak ketiga                   531319304.0
12  Pinjaman yang diberikan pihak berelasi                    936181.0
13  Cadangan kerugian penurunan nilai pada pinjama...      -13448901.0
14  Piutang nasabah pihak ketiga                             4739000.0
15  Cadangan kerugian penurunan nilai pada piutang...         -96874.0

我计划从dict函数开始,根据列['Q1 2020'],将列['Keterangan']作为变量。这是我的步骤

wokwok2_kolomsatu = wokwok2['Keterangan']
wokwok2_kolomdua = wokwok2['Q1 2019']

anjimbanget = wokwok2

import re

def clean(s):
   __source__='https://stackoverflow.com/a/3303361/14638425'
   s = re.sub('[^0-9a-zA-Z_]', '', s)
   s = re.sub('^[^a-zA-Z_]+', '', s)
   return s

def is_valid_variable_name(name):
    try:
        exec(name + '=1')
        return True
    except :
        return False

def row_to_var(wokwok2, wokwok2_kolomsatu, wokwok2_kolom2, space_replace_with=''):
   """
  col_a will be used as variable names and col_b as the values
   """
  laasu = anjimbanget
  laasu[wokwok2_kolomsatu]=laasu[wokwok2_kolomsatu].apply(lambda x:clean(x))
  valid =all([is_valid_variable_name(item) for item in list(laasu.iloc[:,0].values)])
  if (valid):
    laasu_dict=dict(zip(laasu[wokwok2_kolomsatu].values,laasu[wokwok2_kolomdua].values))
    for key,val in laasu_dict.items():
      try:
        exec(key + '='+str(val), globals())
        print(key+' variable created')
      except Exception as e:
        print(e,key)
   else:
    raise ValueError('one or more of the strings are not valid variable names')

row_to_var(laasu,'Keterangan','Q2_2019')

当我运行它时,它出现在collab输出中的一个问题,即:

/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _validate_read_indexer(self, key, 
indexer, axis, raise_missing)
   1296             if missing == len(indexer):
   1297                 axis_name = self.obj._get_axis_name(axis)
-> 1298                 raise KeyError(f"None of [{key}] are in the [{axis_name}]")
   1299 
   1300             # We (temporarily) allow for some missing keys with .loc, except in

KeyError: "None of [Float64Index([ 16525427.0,  43816214.0,   8788218.0,  31345793.0,   5710626.0,\n               
10946883.0,   8551257.0,     -7926.0,  10814986.0,   -408769.0,\n                1041939.0, 
531319304.0,    936181.0, -13448901.0,   4739000.0,\n                 -96874.0],\n             
dtype='float64')] are in the [columns]"

以下是我的愿望,我可以将行字符串称为变量:

[In] : Efekefekyangdiperdagangkanpihakketiga
[Out]: 5710626.0
[In] : Tagihanakseptasipihakketiga
[Out]: 10814986.0

Tags: keynameinvariablebankyangvalidaxis

热门问题