복붙노트

[PYTHON] 항목의 길이가 다른 사전에서 데이터 프레임 만들기

PYTHON

항목의 길이가 다른 사전에서 데이터 프레임 만들기

10 개의 키 - 값 쌍이있는 사전이 있다고 가정 해보십시오. 각 엔트리는 numpy 배열을 유지합니다. 그러나 배열의 길이는 모두 동일하지 않습니다.

각 열에 다른 항목이 들어있는 데이터 프레임을 만들려면 어떻게해야합니까?

내가 시도 할 때 :

pd.DataFrame(my_dict)

나는 얻다:

ValueError: arrays must all be the same length

이걸 극복 할 방법이 있니? 팬더가 NaN을 사용하여 짧은 항목에 대해 해당 열을 채우게해서 기쁩니다.

해결법

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

    1.Python 3.x에서 :

    Python 3.x에서 :

    In [6]: d = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
    
    In [7]: DataFrame(dict([ (k,Series(v)) for k,v in d.items() ]))
    Out[7]: 
        A  B
    0   1  1
    1   2  2
    2 NaN  3
    3 NaN  4
    

    Python 2.x에서 :

    d.items ()를 d.iteritems ()로 대체하십시오.

  2. ==============================

    2.다음과 같은 간단한 방법이 있습니다.

    다음과 같은 간단한 방법이 있습니다.

    In[20]: my_dict = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
    In[21]: df = pd.DataFrame.from_dict(my_dict, orient='index')
    In[22]: df
    Out[22]: 
       0  1   2   3
    A  1  2 NaN NaN
    B  1  2   3   4
    In[23]: df.transpose()
    Out[23]: 
        A  B
    0   1  1
    1   2  2
    2 NaN  3
    3 NaN  4
    
  3. ==============================

    3.이것은 OP 질문에 직접적으로 대답하는 것은 아니지만. 나는 이것이 불공평 한 배열을 가지고 있고 공유하고 싶을 때 이것이 나의 경우를위한 훌륭한 해결책이라는 것을 알았다.

    이것은 OP 질문에 직접적으로 대답하는 것은 아니지만. 나는 이것이 불공평 한 배열을 가지고 있고 공유하고 싶을 때 이것이 나의 경우를위한 훌륭한 해결책이라는 것을 알았다.

    pandas 문서에서

    In [31]: d = {'one' : Series([1., 2., 3.], index=['a', 'b', 'c']),
       ....:      'two' : Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
       ....: 
    
    In [32]: df = DataFrame(d)
    
    In [33]: df
    Out[33]: 
       one  two
    a    1    1
    b    2    2
    c    3    3
    d  NaN    4
    
  4. ==============================

    4.구문을 정리하는 방법은 다음과 같지만 본질적으로 다른 답변과 같습니다.

    구문을 정리하는 방법은 다음과 같지만 본질적으로 다른 답변과 같습니다.

    >>> mydict = {'one': [1,2,3], 2: [4,5,6,7], 3: 8}
    
    >>> dict_df = pd.DataFrame({ key:pd.Series(value) for key, value in mydict.items() })
    
    >>> dict_df
    
       one  2    3
    0  1.0  4  8.0
    1  2.0  5  NaN
    2  3.0  6  NaN
    3  NaN  7  NaN
    

    목록에도 비슷한 구문이 있습니다.

    >>> mylist = [ [1,2,3], [4,5], 6 ]
    
    >>> list_df = pd.DataFrame([ pd.Series(value) for value in mylist ])
    
    >>> list_df
    
         0    1    2
    0  1.0  2.0  3.0
    1  4.0  5.0  NaN
    2  6.0  NaN  NaN
    

    그러나리스트의 신택스에는 다음과 같은 다른 (바람직한?) 동작이 있습니다.

    >>> list_df = pd.DataFrame({ i:pd.Series(value) for i, value in 
    enumerate(mylist) })
    
    >>> list_df
    
       0    1    2
    0  1  4.0  6.0
    1  2  5.0  NaN
    2  3  NaN  NaN
    

    이 모든 경우에 팬더가 자신의 기둥에 대해 추측 할 데이터 유형을주의 깊게 확인해야합니다. 임의의 NaN 값을 포함하는 열은 예를 들어 float로 변환됩니다.

  5. ==============================

    5.pd.concat을 axis = 1을 따라 pd.Series 객체 목록과 함께 사용할 수도 있습니다.

    pd.concat을 axis = 1을 따라 pd.Series 객체 목록과 함께 사용할 수도 있습니다.

    import pandas as pd, numpy as np
    
    d = {'A': np.array([1,2]), 'B': np.array([1,2,3,4])}
    
    res = pd.concat([pd.Series(v, name=k) for k, v in d.items()], axis=1)
    
    print(res)
    
         A  B
    0  1.0  1
    1  2.0  2
    2  NaN  3
    3  NaN  4
    
  6. from https://stackoverflow.com/questions/19736080/creating-dataframe-from-a-dictionary-where-entries-have-different-lengths by cc-by-sa and MIT license