我有一本看起来像这样的字典......
{'Bitfinex': {'BTC/USD': [{'buy or sell': 'buy',
'date': '1466673272.0',
'margin': False,
'order number': 841508598,
'price': '391.42',
'type': 'exchange limit',
'volume': '0.01490759'},
{'buy or sell': 'buy',
'date': '1466673283.0',
'margin': False,
'order number': 841509160,
'price': '150.11',
'type': 'exchange limit',
'volume': '0.04342146'}]},
'Poloniex': {'USDT/BTC': [{'buy or sell': 'buy',
'date': '2016-06-24 09:14:31',
'margin': False,
'order number': '5299560256',
'price': '1.00112000',
'volume': '10.63783387'},
{'buy or sell': 'buy',
'date': '2016-06-24 09:14:29',
'margin': False,
'order number': '5299559257',
'price': '10.01190000',
'volume': '1.00490446'},
{'buy or sell': 'buy',
'date': '2016-06-24 09:14:26',
'margin': False,
'order number': '5299553263',
'price': '100.08200000',
'volume': '0.04170130'}]}}
我需要它成为一个像这样的列的Pandas数据框:
Exchange | Currency Pair | Buy or Sell | Date | Margin | Order Number | Price | Volume
有没有一种简单的方法可以做到这一点,而无需迭代键和&值?
答案 0 :(得分:1)
“轻松”在这里非常主观。我怀疑有没有办法做到这一点,而无需重复键和键;价值观,至少没有一些功能性的魔力,如果它更短,更易读/可理解,那就值得怀疑。
如果您想尝试迭代,可以使用以下内容执行此操作,其中INPUT是您的输入字典,如示例所示:
import pandas as pd
...
def convertToDataFrameItems(olddata):
name_map={
'buy or sell': 'Buy or Sell',
'date': 'Date',
'margin': 'Margin',
'order number': 'Order Number',
'price': 'Price',
'volume': 'Volume'
}
for ex, currencies in olddata.items():
for currency, data in currencies.items():
for item in data:
d = dict()
for oldname,newname in name_map.items():
d[newname] = item[oldname]
d.update({"Exchange":ex,"Currency Pair":currency})
yield d
pd.DataFrame([x for x in convertToDataFrameItems(INPUT)])
在将数据映射到单个集合之后,此list of dictionary构造函数应根据需要创建列。
注意:由于我没有安装panda,所以无法测试代码