[PYTHON] 항목의 길이가 다른 사전에서 데이터 프레임 만들기
PYTHON항목의 길이가 다른 사전에서 데이터 프레임 만들기
10 개의 키 - 값 쌍이있는 사전이 있다고 가정 해보십시오. 각 엔트리는 numpy 배열을 유지합니다. 그러나 배열의 길이는 모두 동일하지 않습니다.
각 열에 다른 항목이 들어있는 데이터 프레임을 만들려면 어떻게해야합니까?
내가 시도 할 때 :
pd.DataFrame(my_dict)
나는 얻다:
ValueError: arrays must all be the same length
이걸 극복 할 방법이 있니? 팬더가 NaN을 사용하여 짧은 항목에 대해 해당 열을 채우게해서 기쁩니다.
해결법
-
==============================
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.다음과 같은 간단한 방법이 있습니다.
다음과 같은 간단한 방법이 있습니다.
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.이것은 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.구문을 정리하는 방법은 다음과 같지만 본질적으로 다른 답변과 같습니다.
구문을 정리하는 방법은 다음과 같지만 본질적으로 다른 답변과 같습니다.
>>> 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.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
from https://stackoverflow.com/questions/19736080/creating-dataframe-from-a-dictionary-where-entries-have-different-lengths by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 일정 시간 후에 스레드를 중지하는 중 (0) | 2018.10.11 |
---|---|
[PYTHON] Win32 API를 파이썬과 함께 사용하는 방법? (0) | 2018.10.11 |
[PYTHON] 날짜 문자열을 다른 형식으로 변환하는 방법 [중복] (0) | 2018.10.11 |
[PYTHON] 두 마커 사이에서 부분 문자열을 추출하는 방법은 무엇입니까? (0) | 2018.10.11 |
[PYTHON] 파이썬 함수 포인터 (0) | 2018.10.11 |