반응형
pandas를 만듭니다.사전에서 데이터프레임
다음과 같은 형태의 사전을 가지고 있습니다.
{'user':{movie:rating} }
예를들면,
{Jill': {'Avenger: Age of Ultron': 7.0,
'Django Unchained': 6.5,
'Gone Girl': 9.0,
'Kill the Messenger': 8.0}
'Toby': {'Avenger: Age of Ultron': 8.5,
'Django Unchained': 9.0,
'Zoolander': 2.0}}
나는 이 dict를 사용자 이름 열 1과 다른 열 영화 등급 열이 있는 팬더 데이터 프레임으로 변환하고 싶습니다.
user Gone_Girl Horrible_Bosses_2 Django_Unchained Zoolander etc. \
그러나 일부 사용자는 동영상의 등급을 매기지 않았으므로 이러한 동영상은 해당 사용자 키()의 값()에 포함되지 않습니다.이런 경우에는 그냥 NaN으로 엔트리를 채우는 것이 좋을 것 같습니다.
지금부터는 키를 반복하고 목록을 채운 다음 이 목록을 사용하여 데이터 프레임을 만듭니다.
data=[]
for i,key in enumerate(movie_user_preferences.keys() ):
try:
data.append((key
,movie_user_preferences[key]['Gone Girl']
,movie_user_preferences[key]['Horrible Bosses 2']
,movie_user_preferences[key]['Django Unchained']
,movie_user_preferences[key]['Zoolander']
,movie_user_preferences[key]['Avenger: Age of Ultron']
,movie_user_preferences[key]['Kill the Messenger']))
# if no entry, skip
except:
pass
df=pd.DataFrame(data=data,columns=['user','Gone_Girl','Horrible_Bosses_2','Django_Unchained','Zoolander','Avenger_Age_of_Ultron','Kill_the_Messenger'])
하지만 이것은 세트의 모든 영화를 평가한 사용자의 데이터 프레임만 제공합니다.
제 목표는 (위에서 보여준 무차별 대입 방식이 아닌) 영화 레이블을 반복하여 데이터 목록에 추가하고, 둘째로 모든 사용자를 포함하고 영화 등급이 없는 요소에 null 값을 배치하는 데이터 프레임을 만드는 것입니다.
dict 명령을 DataFrame 생성자에게 전달할 수 있습니다.
In [11]: d = {'Jill': {'Django Unchained': 6.5, 'Gone Girl': 9.0, 'Kill the Messenger': 8.0, 'Avenger: Age of Ultron': 7.0}, 'Toby': {'Django Unchained': 9.0, 'Zoolander': 2.0, 'Avenger: Age of Ultron': 8.5}}
In [12]: pd.DataFrame(d)
Out[12]:
Jill Toby
Avenger: Age of Ultron 7.0 8.5
Django Unchained 6.5 9.0
Gone Girl 9.0 NaN
Kill the Messenger 8.0 NaN
Zoolander NaN 2.0
또는 사용.from_dict
방법:
In [13]: pd.DataFrame.from_dict(d)
Out[13]:
Jill Toby
Avenger: Age of Ultron 7.0 8.5
Django Unchained 6.5 9.0
Gone Girl 9.0 NaN
Kill the Messenger 8.0 NaN
Zoolander NaN 2.0
In [14]: pd.DataFrame.from_dict(d, orient='index')
Out[14]:
Django Unchained Gone Girl Kill the Messenger Avenger: Age of Ultron Zoolander
Jill 6.5 9 8 7.0 NaN
Toby 9.0 NaN NaN 8.5 2
이러한 단순한 접근 방식도 효과가 있는 것처럼 보이지만, 제 생각에는 영화 레이블을 반복하는 것이 여전히 더 강력할 것 같습니다.
data=[]
for i,key in enumerate(movie_user_preferences.keys() ):
try:
data.append((key
,movie_user_preferences[key]['Gone Girl'] if 'Gone Girl' in movie_user_preferences[key] else 'NaN'
,movie_user_preferences[key]['Horrible Bosses 2'] if 'Horrible Bosses 2' in movie_user_preferences[key] else 'NaN'
,movie_user_preferences[key]['Django Unchained'] if 'Django Unchained' in movie_user_preferences[key] else 'NaN'
,movie_user_preferences[key]['Zoolander'] if 'Zoolander' in movie_user_preferences[key] else 'NaN'
,movie_user_preferences[key]['Avenger: Age of Ultron'] if 'Avenger: Age of Ultron' in movie_user_preferences[key] else 'NaN'
,movie_user_preferences[key]['Kill the Messenger'] if 'Kill the Messenger' in movie_user_preferences[key] else 'NaN' ))
# if no entry, skip
except:
pass
user Gone_Girl Horrible_Bosses_2 Django_Unchained Zoolander \
0 Sam 6 3 7.5 7
1 Max 10 6 7.0 10
2 Robert NaN 5 7.0 9
3 Toby NaN NaN 9.0 2
4 Julia 6.5 NaN 6.0 6.5
5 William 7 4 8.0 4
6 Jill 9 NaN 6.5 NaN
Avenger_Age_of_Ultron Kill_the_Messenger
0 10.0 5.5
1 7.0 5
2 8.0 9
3 8.5 NaN
4 10.0 6
5 6.0 6.5
6 7.0 8
언급URL : https://stackoverflow.com/questions/33157522/create-pandas-dataframe-from-dictionary-of-dictionaries
반응형
'source' 카테고리의 다른 글
MAC phphmyadmin:mariadb로 데이터베이스 서버를 실행하는 방법? (0) | 2023.11.05 |
---|---|
객체의 JavaScript 배열을 최소/최대 값으로 비교 (0) | 2023.11.05 |
ORA-04036: 인스턴스에서 사용하는 PGA 메모리가 PGA_AGGRATE_LIMIT를 초과합니다. (0) | 2023.11.05 |
오라클 개체 종속성 루프 (0) | 2023.11.05 |
MySQL GUID/UUID 저장 (0) | 2023.11.05 |