我有一个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 :(得分: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']
并执行向量化算术运算。