我有一个df,这些值是一个字典,看起来像这样:
'kg of valencian tomato (before tomatina)'
2017-06-09 {'weight': 0.0049385761, 'price': 12.18, 'time':'14:17'}
2017-06-12 {'weight': 0.0049441361, 'price': 12.1, 'time': '15:21'}
2017-06-13 {'price': 12.06, 'weight': 0.00491616, 'time': '09:21'}
2017-06-14 {'weight': 0.0048403923, 'price': 11.77, 'time':'10:12'}
我期待的是这样的df的值是price
值
'kg of valencian tomato (before tomatina)'
2017-06-09 12.18
2017-06-12 12.1
2017-06-13 12.06
2017-06-14 11.77
我首先尝试的是:
format = lambda x: list(x.values())[1]
df2=df2.applymap(format)
直到我注意到不同的词典没有遵循相同的顺序。我怎样才能获得所需的输出?
我面临的另一个问题是我有大量不同名称的列,有没有办法将它应用到整个df?
答案 0 :(得分:1)
您可以使用apply
:
df['price'] = df['kg of valencian tomato (after tomatina)'].apply(lambda x: x['price'])
print (df)
kg of valencian tomato (after tomatina) price
2017-06-09 {'price': 12.18, 'time': '14:17', 'weight': 0.... 12.18
2017-06-12 {'price': 12.1, 'time': '15:21', 'weight': 0.0... 12.10
2017-06-13 {'price': 12.06, 'time': '09:21', 'weight': 0.... 12.06
2017-06-14 {'price': 11.77, 'time': '10:12', 'weight': 0.... 11.77
如果有dict
的多个列使用applymap
:
cols = ['kg of valencian tomato (after tomatina)','another col']
df[cols] = df[cols].applymap(lambda x: x['price'])
print (df)
kg of valencian tomato (after tomatina)
2017-06-09 12.18
2017-06-12 12.10
2017-06-13 12.06
2017-06-14 11.77