2017-06-12 89 views
1

獲取具體數值我有一個DF這些值的字典:在數據幀

df:        
             A 
    2017-05-31 {'price': '7.25', 'weight': 0.0, 'time': 4.05am} 
    2017-06-01 {'price': '7.22', 'weight': 0.0 'time': 4.08am} 
    2017-06-02 {'price': '7.24', 'weight': 0.0, 'time': 5.08am} 
    2017-06-05 {'price': '7.25', 'weight': 0.0, 'time': 6.07am} 
    2017-06-06 {'price': '7.19', 'weight': 0.0, 'time':3.33am} 
    2017-06-07 {'weight': 0.0, 'price': 7.12, 'time':1.09am} 
    2017-06-09 {'weight': 0.0, 'price': 7.46, 'time':2.08am} 

我想獲得每行的關鍵price的值。 所需的輸出是

df:        
            A 
2017-05-31      7.25 
2017-06-01      7.22 
2017-06-02      7.24 
2017-06-05      7.25 
2017-06-06      7.19 
2017-06-07      7.12 
2017-06-09      7.46 

如果字典是遵循price-weight-time相同的結構,我可以簡單地套用一個這樣的代碼:

format = lambda x: list(x.values())[0] 
print(df.applymap(format)) 

然而不幸的是,這不是這種情況。

我想到也許排序的字典值,但我不知道如何在df內做到這一點。

任何人都可以幫我解決這個問題嗎?

+0

我想'df ['A'] .application(lambda x:x ['price'])'應該可以工作 – EdChum

回答

1

使用apply與拉姆達的選擇key

df['A'] = df['A'].apply(lambda x: x['price']) 
print (df) 
       A 
2017-05-31 7.25 
2017-06-01 7.22 
2017-06-02 7.24 
2017-06-05 7.25 
2017-06-06 7.19 
2017-06-07 7.12 
2017-06-09 7.46. 

對於所有值使用DataFrame構造:

df1 = pd.DataFrame(df['A'].values.tolist(), index=df.index) 
print (df1) 
      price time weight 
2017-05-31 7.25 4.05am  0.0 
2017-06-01 7.22 4.08am  0.0 
2017-06-02 7.24 5.08am  0.0 
2017-06-05 7.25 6.07am  0.0 
2017-06-06 7.19 3.33am  0.0 
2017-06-07 7.12 1.09am  0.0 
2017-06-09 7.46 2.08am  0.0 
+1

OP想要'價格'鍵而不是'時間'否? – EdChum

+0

你是對的,謝謝。 – jezrael

1

您可以使用apply,並通過一個lambda訪問所關心的重點:

df['A'].apply(lambda x: x['price']) 

就個人而言,我會避免在df中存儲非標量值,因爲您失去了使用pandas IMO的矢量化優勢。如果字典只有相同的鍵值對,我只需展開字典並將這些鍵存儲爲列和值,然後就可以執行df['price']並執行矢量化算術運算。

+0

我會考慮您的建議。謝謝 – ge00rge