2016-02-26 4 views
0

Я использую pandas для создания dataframe, и все в порядке, но у меня есть два столбца, в которых есть словари. Как разбить эти столбцы, чтобы извлечь стоимость и значение ставки.Python pandas, получающий значение словаря в столбце

   AgainstSidePrices      ForSidePrices 
0 {u'_Price': 4.8, u'_Stake': 160.69} {u'_Price': 4.6, u'_Stake': 21.44} 
1  {u'_Price': 4.8, u'_Stake': 5.69}  {u'_Price': 4.7, u'_Stake': 4.0} 
2  {u'_Price': 5.0, u'_Stake': 22.32} {u'_Price': 4.9, u'_Stake': 15.34} 
3  {u'_Price': 5.6, u'_Stake': 15.18} {u'_Price': 5.4, u'_Stake': 14.82} 
4  {u'_Price': 9.6, u'_Stake': 4.22} {u'_Price': 9.4, u'_Stake': 6.71} 
5  {u'_Price': 12.5, u'_Stake': 4.0} {u'_Price': 11.5, u'_Stake': 12.35} 
6  {u'_Price': 950.0, u'_Stake': 2.0} {u'_Price': 128.0, u'_Stake': 2.25} 
7         NaN         NaN 
8  {u'_Price': 4.8, u'_Stake': 4.72} {u'_Price': 4.6, u'_Stake': 9.32} 
9  {u'_Price': 4.9, u'_Stake': 2.0} {u'_Price': 4.7, u'_Stake': 3.92} 

У меня есть решение для этого, но проблема возникает, когда существует NaN как линии 7.

table['price'] = table['AgainstSidePrices'].apply(lambda x: x.get('_Price')) 

Можете ли вы помочь мне, пожалуйста?

+2

так что вы просто хотите игнорировать «NaN»? 'table.loc [table ['AgainstSidePrices']. notnull(), 'AgainstSidePrices']. apply (lambda x: x.get ('_ Price'))' – EdChum

+0

Спасибо. Все получилось. –

ответ

1

В зависимости от того, что вам нужно, либо применить его к непустых записей:

table.AgainstSidePrices[table.AgainstSideProces.notnull()].apply(...) 

или изменить функцию apply, чтобы справиться с этим:

... apply(lambda x: <something> if x is None else x.get('_Price')) 

Обратите внимание, что размеры ответов разные: первый применяется только к соответствующим строкам, второй - ко всем.

+0

'notnull' более читается, чем' ~ isnull' IMO – EdChum

+0

@EdChum Спасибо за точку. Будет обновляться. –

Смежные вопросы