>

데이터 프레임에서 많은 데이터를 청크하려고합니다. 그렇게하려면 사전에 동적 이름을 정의해야합니다.

다음과 같은 일을하고 싶습니다 :

dict_{}.format(VARIABLE_NAME) = {}

위의 그림은 잘못된 조작입니다. 새 사전 이름을 만들어야 할 때마다 새 사전 이름을 정의하려면 어떻게해야합니까? 이것은 for 루프에서 발생하므로 동적 dict 이름을 사용해야합니다. 제공해야 할 다른 것이 있으면 알려주세요.

다음은 데이터 프레임의 스 니펫입니다

  REFERENCE_CODE                                        TRANSLATION
0      ladder_now                                                NaN
1               0                                              xyzwu
2               1                                              yxzuv
3               2                                            asdfasd
4               3                                             sdfsdh
5               4                                             hghffg
6               5                                            agfdhsj
7               6                                            dfgasgf
8               7                                             jfhkgj
9               8                                           djfgjfhk
10              9                                            dsfasys
11             10                                            kghkfdy
12             98                                          dsfhsuert
13             99                                           wsdfadjs
14  country_satis  Sa pangkagab’san, aoogma po ba kamo o dai naoo...
15              1                                            Naoogma
16              2                                        Dai naoogma
17              8                           Dai aram (HUWAG BASAHIN)
18              9                           Huminabo (HUWAG BASAHIN)
19            NaN                                                NaN

ladder_now 와 같이 데이터 덩어리를 가져 오려고합니다.  그와 관련된 모든 값을 찾으면 country_satis 를 찾으십시오.  그 값을 가져 와서 별도의 사전에 넣습니다. 내가 가진 논리는 다음과 같습니다. 동적으로 생성 된 dict이 누락되었습니다 :

for index, row in df.iterrows():
    j = 0
    if isinstance(row['REFERENCE_CODE'], str):
        if j == 0:
            # fix dynamically changing dict here
            trend_dict = {}
            trend_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
        else:
            j = 0
            # create new dynamically named dictionary
            next_dict = {}
            next_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
    else:
        trend_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
        j += 1

본질적으로 dict_ladder_now 를 갖고 싶습니다   country_satis 에 도달 할 때까지 모든 키, 그 아래의 모든 값 쌍을 포함하는 하나의 사전으로 그런 다음 dict_country_satis  다른 사람으로서.

  • 답변 # 1

    동적 수의 변수 이름을 즉석에서 생성하는 대신 사전이나 목록과 같은 객체를 저장하기 위해 다른 상위 수준의 데이터 구조를 선택해야합니다.

    import pandas as pd
    REFERENCE_CODE = ["ladder_now", 0, 1, 5, 15, "country_satis", 20, 50, 100, "test3", 10, 50, 90]
    TRANSLATION = list(range(len(REFERENCE_CODE)))
    df = pd.DataFrame({"REFERENCE_CODE": REFERENCE_CODE,
                       "TRANSLATION": TRANSLATION
                       })
    print(df)
    #Output: Dummy data prepared for reference
       REFERENCE_CODE  TRANSLATION
    0      ladder_now            0
    1               0            1
    2               1            2
    3               5            3
    4              15            4
    5   country_satis            5
    6              20            6
    7              50            7
    8             100            8
    9           test3            9
    10             10           10
    11             50           11
    12             90           12
    
    

    목록 사용: 목록 사용 및 원래 질문에 작성된 논리

    result = [] #container list that grows dynamically
    for index, row in df.iterrows():
        j = 0
        if isinstance(row['REFERENCE_CODE'], str):
            if j == 0:
                # fix dynamically changing dict here
                result.append({}) #new dictionary in container
                result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
            else:
                j = 0
                # create new dynamically named dictionary
                result.append({}) #new dictionary in container
                result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
        else:
            result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
            j += 1
    
    

    논리가 작성되는 방식에 따라 다음과 같이 단순화 할 수 있습니다. j 변수는 사용되지 않으며 거의 ​​모든 블록에 동일한 코드 줄이 작성됩니다. 이것으로 끝납니다 :

    result = []      
    for index, row in df.iterrows():
        if isinstance(row['REFERENCE_CODE'], str):
            result.append({})
        result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
    print(result)
    #Output:
    [{'ladder_now': 0, 0: 1, 1: 2, 5: 3, 15: 4},
     {'country_satis': 5, 20: 6, 50: 7, 100: 8},
     {'test3': 9, 10: 10, 50: 11, 90: 12}]
    
    

    dict 사용: 사전 컨테이너는 이름으로 하위 사전을 참조 할 수 있으므로 더 좋을 수 있습니다.

    result_dict = {}
    for index, row in df.iterrows():
        if isinstance(row['REFERENCE_CODE'], str):
            key = row['REFERENCE_CODE']
            result_dict[key] = {}
        result_dict[key][row['REFERENCE_CODE']] = row['TRANSLATION']
    print(result_dict)
    #Output:
    {'ladder_now': {'ladder_now': 0, 0: 1, 1: 2, 5: 3, 15: 4},
     'country_satis': {'country_satis': 5, 20: 6, 50: 7, 100: 8},
     'test3': {'test3': 9, 10: 10, 50: 11, 90: 12}}
    
    

    if 블록의 논리를 더 수정하고 싶을 수 있습니다. 특히 하위 키 안에 문자열 키가 다시 나타나기를 확신하지 않기 때문입니다. 그러나이 방법을 사용하면 동적 개수의 항목을 만드는 방법을 알 수 있습니다.

관련 자료

  • 이전 google maps - KML 파일에 맞춤 ExtendedData를 표시하려면 어떻게해야하나요?
  • 다음 javascript - Firebase 호스팅을 도메인에 연결 한 후 구성의 authDomain 또는 databaseURL이 변경됩니까?