복붙노트

[PYTHON] 파이썬 판다 데이터 프레임 사전

PYTHON

파이썬 판다 데이터 프레임 사전

필자는 두 개의 열 데이터 프레임을 가지고이를 파이썬 사전으로 변환하려고합니다. 첫 번째 열은 키이고 두 번째 열은 값이 될 것입니다. 미리 감사드립니다.

데이터 프레임 :

    id    value
0    0     10.2
1    1      5.7
2    2      7.4

해결법

  1. ==============================

    1.to_dict에 대한 문서를 참조하십시오. 다음과 같이 사용할 수 있습니다.

    to_dict에 대한 문서를 참조하십시오. 다음과 같이 사용할 수 있습니다.

    df.set_index('id').to_dict()
    

    그리고 하나의 열만있는 경우 열 이름을 피하기 위해 dict (실제로이 경우 Series.to_dict ())를 사용합니다.

    df.set_index('id')['value'].to_dict()
    
  2. ==============================

    2.

    mydict = dict(zip(df.id, df.value))
    
  3. ==============================

    3.중복을 보존하는 간단한 방법을 원할 경우 groupby를 사용할 수 있습니다.

    중복을 보존하는 간단한 방법을 원할 경우 groupby를 사용할 수 있습니다.

    >>> ptest = pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) 
    >>> ptest
      id  value
    0  a      1
    1  a      2
    2  b      3
    >>> {k: g["value"].tolist() for k,g in ptest.groupby("id")}
    {'a': [1, 2], 'b': [3]}
    
  4. ==============================

    4.이 스레드의 joris 및 중복 스레드의 punchagan의 대답은 매우 우아하지만 키에 사용 된 열에 중복 된 값이 포함되어 있으면 올바른 결과를 제공하지 않습니다.

    이 스레드의 joris 및 중복 스레드의 punchagan의 대답은 매우 우아하지만 키에 사용 된 열에 중복 된 값이 포함되어 있으면 올바른 결과를 제공하지 않습니다.

    예 :

    >>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) 
    >>> ptest
      id  value
    0  a      1
    1  a      2
    2  b      3
    
    # note that in both cases the association a->1 is lost:
    >>> ptest.set_index('id')['value'].to_dict()
    {'a': 2, 'b': 3}
    >>> dict(zip(ptest.id, ptest.value))
    {'a': 2, 'b': 3}
    

    중복 된 항목이 있고 그것을 잃고 싶지 않은 경우이 못생긴하지만 작업 코드를 사용할 수 있습니다.

    >>> mydict = {}
    >>> for x in range(len(ptest)):
    ...     currentid = ptest.iloc[x,0]
    ...     currentvalue = ptest.iloc[x,1]
    ...     mydict.setdefault(currentid, [])
    ...     mydict[currentid].append(currentvalue)
    >>> mydict
    {'a': [1, 2], 'b': [3]}
    
  5. ==============================

    5.일부 버전에서는 아래 코드가 작동하지 않을 수 있습니다.

    일부 버전에서는 아래 코드가 작동하지 않을 수 있습니다.

    mydict = dict(zip(df.id, df.value))
    

    그래서 그것을 명백하게해라.

    id_=df.id.values
    value=df.value.values
    mydict=dict(zip(id_,value))
    

    참고 단어 id는 예약어이므로 id_를 사용했습니다.

  6. ==============================

    6.'독해력 이해'를 사용할 수 있습니다.

    '독해력 이해'를 사용할 수 있습니다.

    my_dict = {row[0]: row[1] for row in df.values}
    
  7. ==============================

    7.중복 된 항목을 잃지 않기위한 또 다른 (약간 더 짧은) 솔루션 :

    중복 된 항목을 잃지 않기위한 또 다른 (약간 더 짧은) 솔루션 :

    >>> ptest = pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id','value'])
    >>> ptest
      id  value
    0  a      1
    1  a      2
    2  b      3
    
    >>> pdict = dict()
    >>> for i in ptest['id'].unique().tolist():
    ...     ptest_slice = ptest[ptest['id'] == i]
    ...     pdict[i] = ptest_slice['value'].tolist()
    ...
    
    >>> pdict
    {'b': [3], 'a': [1, 2]}
    
  8. ==============================

    8.사전 값으로 목록이 필요합니다. 이 코드는 트릭을 수행합니다.

    사전 값으로 목록이 필요합니다. 이 코드는 트릭을 수행합니다.

    from collections import defaultdict
    mydict = defaultdict(list)
    for k, v in zip(df.id.values,df.value.values):
        mydict[k].append(v)
    
  9. from https://stackoverflow.com/questions/18695605/python-pandas-dataframe-to-dictionary by cc-by-sa and MIT license