我有数据框best_scores
contanining
subsample colsample_bytree learning_rate max_depth min_child_weight \
3321 0.8 0.8 0.3 2 3
objective scale_pos_weight silent
3321 binary:logistic 1.846154 1
我想将其转换为字典params
,如:
params
{'colsample_bytree': 0.8,
'learning_rate': 0.3,
'max_depth': 2,
'min_child_weight': 3,
'objective': 'binary:logistic',
'scale_pos_weight': 1.8461538461538463,
'silent': 1,
'subsample': 0.8}
但如果我跑
best_scores.to_dict(orient='records')
我明白了:
[{'colsample_bytree': 0.8,
'learning_rate': 0.3,
'max_depth': 2,
'min_child_weight': 3,
'objective': 'binary:logistic',
'scale_pos_weight': 1.8461538461538463,
'silent': 1L,
'subsample': 0.8}]
你能帮忙吗?
答案 0 :(得分:1)
您正在获取字典列表,因为您要将DataFrame
转换为dict
,这可能包含多行。每行都是列表中的一个条目。
除了提到的简单选择第一个条目的解决方案之外,实现目标的理想方法是使用Series
而不是DataFrame
。这样,只返回一个dict
:
In [2]: s = pd.Series([1, 2 ,3], index=['a', 'b', 'c'])
In [3]: s.to_dict()
Out[3]: {'a': 1, 'b': 2, 'c': 3}
In [4]: d = pd.DataFrame(s).T
In [5]: d
Out[5]:
a b c
0 1 2 3
In [6]: d.iloc[0]
Out[6]:
a 1
b 2
c 3
Name: 0, dtype: int64
In [7]: d.iloc[0].to_dict()
Out[7]: {'a': 1, 'b': 2, 'c': 3}