2017-06-12 93 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