获取数据框中的特定值

时间:2017-06-12 09:58:42

标签: python python-3.x pandas

我有一个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中进行排序。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

apply与lambda一起用于选择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 :(得分:1)

您可以使用apply并传递lambda来访问感兴趣的密钥:

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

我个人避免在df中存储非标量值,因为你失去了使用pandas IMO的任何矢量化优势。如果dict只有相同的键值对,我只需展开dict并将这些键存储为列和值,然后你就可以执行df['price']并执行向量化算术运算。