![](/img/trans.png)
[英]Creating a pandas Dataframe from a list of Dictionaries, dictionary keys as columns
[英]Convert List of Dictionaries into Pandas DataFrame using keys as columns
我在下面有一個市場數據字典列表,如何使用它的鍵作為列/
[
'{"level":0,"side":"Ask","price":"13745.75000","volume":"2"}',
'{"level":1,"side":"Ask","price":"13745.50000","volume":"5"}',
'{"level":2,"side":"Ask","price":"13745.25000","volume":"6"}',
'{"level":3,"side":"Ask","price":"13745.00000","volume":"15"}',
'{"level":4,"side":"Ask","price":"13744.75000","volume":"4"}',
'{"level":5,"side":"Ask","price":"13744.50000","volume":"5"}',
'{"level":6,"side":"Ask","price":"13744.25000","volume":"3"}',
'{"level":7,"side":"Ask","price":"13744.00000","volume":"3"}',
'{"level":8,"side":"Ask","price":"13743.75000","volume":"2"}',
'{"level":9,"side":"Ask","price":"13743.50000","volume":"1"}',
'{"level":10,"side":"Bid","price":"13743.00000","volume":"2"}',
'{"level":11,"side":"Bid","price":"13742.75000","volume":"4"}',
'{"level":12,"side":"Bid","price":"13742.50000","volume":"3"}',
'{"level":13,"side":"Bid","price":"13742.25000","volume":"4"}',
'{"level":14,"side":"Bid","price":"13742.00000","volume":"4"}',
'{"level":15,"side":"Bid","price":"13741.75000","volume":"4"}',
'{"level":16,"side":"Bid","price":"13741.50000","volume":"4"}',
'{"level":17,"side":"Bid","price":"13741.25000","volume":"4"}',
'{"level":18,"side":"Bid","price":"13741.00000","volume":"4"}',
'{"level":19,"side":"Bid","price":"13740.75000","volume":"2"}',
]
你有一個字典的字符串表示列表。 如果您可以將其轉換為字典列表,則更容易轉換為 pandas dataframe。
為此,您可以使用ast.literal_eval
,它比像這樣的普通eval
更安全
from ast import literal_eval
data = ['{"level":0,"side":"Ask","price":"13745.75000","volume":"2"}', '{"level":1,"side":"Ask","price":"13745.50000","volume":"5"}', '{"level":2,"side":"Ask","price":"13745.25000","volume":"6"}', '{"level":3,"side":"Ask","price":"13745.00000","volume":"15"}', '{"level":4,"side":"Ask","price":"13744.75000","volume":"4"}', '{"level":5,"side":"Ask","price":"13744.50000","volume":"5"}', '{"level":6,"side":"Ask","price":"13744.25000","volume":"3"}', '{"level":7,"side":"Ask","price":"13744.00000","volume":"3"}', '{"level":8,"side":"Ask","price":"13743.75000","volume":"2"}', '{"level":9,"side":"Ask","price":"13743.50000","volume":"1"}', '{"level":10,"side":"Bid","price":"13743.00000","volume":"2"}', '{"level":11,"side":"Bid","price":"13742.75000","volume":"4"}', '{"level":12,"side":"Bid","price":"13742.50000","volume":"3"}', '{"level":13,"side":"Bid","price":"13742.25000","volume":"4"}', '{"level":14,"side":"Bid","price":"13742.00000","volume":"4"}', '{"level":15,"side":"Bid","price":"13741.75000","volume":"4"}', '{"level":16,"side":"Bid","price":"13741.50000","volume":"4"}', '{"level":17,"side":"Bid","price":"13741.25000","volume":"4"}', '{"level":18,"side":"Bid","price":"13741.00000","volume":"4"}', '{"level":19,"side":"Bid","price":"13740.75000","volume":"2"}']
data_new = [literal_eval(i) for i in data]
Output 看起來像這樣,
[{'level': 0, 'side': 'Ask', 'price': '13745.75000', 'volume': '2'},
{'level': 1, 'side': 'Ask', 'price': '13745.50000', 'volume': '5'},
{'level': 2, 'side': 'Ask', 'price': '13745.25000', 'volume': '6'},
{'level': 3, 'side': 'Ask', 'price': '13745.00000', 'volume': '15'},
{'level': 4, 'side': 'Ask', 'price': '13744.75000', 'volume': '4'},
{'level': 5, 'side': 'Ask', 'price': '13744.50000', 'volume': '5'},
{'level': 6, 'side': 'Ask', 'price': '13744.25000', 'volume': '3'},
{'level': 7, 'side': 'Ask', 'price': '13744.00000', 'volume': '3'},
{'level': 8, 'side': 'Ask', 'price': '13743.75000', 'volume': '2'},
{'level': 9, 'side': 'Ask', 'price': '13743.50000', 'volume': '1'},
{'level': 10, 'side': 'Bid', 'price': '13743.00000', 'volume': '2'},
{'level': 11, 'side': 'Bid', 'price': '13742.75000', 'volume': '4'},
{'level': 12, 'side': 'Bid', 'price': '13742.50000', 'volume': '3'},
{'level': 13, 'side': 'Bid', 'price': '13742.25000', 'volume': '4'},
{'level': 14, 'side': 'Bid', 'price': '13742.00000', 'volume': '4'},
{'level': 15, 'side': 'Bid', 'price': '13741.75000', 'volume': '4'},
{'level': 16, 'side': 'Bid', 'price': '13741.50000', 'volume': '4'},
{'level': 17, 'side': 'Bid', 'price': '13741.25000', 'volume': '4'},
{'level': 18, 'side': 'Bid', 'price': '13741.00000', 'volume': '4'},
{'level': 19, 'side': 'Bid', 'price': '13740.75000', 'volume': '2'}]
如您所見,它是一個字典列表。 Pandas 可以輕松處理它。 要轉換為 pandas dataframe,請執行此操作,
df = pd.DataFrame(data_new)
level side price volume
0 0 Ask 13745.75000 2
1 1 Ask 13745.50000 5
2 2 Ask 13745.25000 6
3 3 Ask 13745.00000 15
4 4 Ask 13744.75000 4
5 5 Ask 13744.50000 5
6 6 Ask 13744.25000 3
7 7 Ask 13744.00000 3
8 8 Ask 13743.75000 2
9 9 Ask 13743.50000 1
10 10 Bid 13743.00000 2
11 11 Bid 13742.75000 4
12 12 Bid 13742.50000 3
13 13 Bid 13742.25000 4
14 14 Bid 13742.00000 4
15 15 Bid 13741.75000 4
16 16 Bid 13741.50000 4
17 17 Bid 13741.25000 4
18 18 Bid 13741.00000 4
19 19 Bid 13740.75000 2
如果需要,您也可以將級別設置為索引,
df = pd.DataFrame(df_new).set_index("level")
data=['{"level":0,"side":"Ask","price":"13745.75000","volume":"2"}', '{"level":1,"side":"Ask","price":"13745.50000","volume":"5"}', '{"level":2,"side":"Ask","price":"13745.25000","volume":"6"}', '{"level":3,"side":"Ask","price":"13745.00000","volume":"15"}', '{"level":4,"side":"Ask","price":"13744.75000","volume":"4"}', '{"level":5,"side":"Ask","price":"13744.50000","volume":"5"}', '{"level":6,"side":"Ask","price":"13744.25000","volume":"3"}', '{"level":7,"side":"Ask","price":"13744.00000","volume":"3"}', '{"level":8,"side":"Ask","price":"13743.75000","volume":"2"}', '{"level":9,"side":"Ask","price":"13743.50000","volume":"1"}', '{"level":10,"side":"Bid","price":"13743.00000","volume":"2"}', '{"level":11,"side":"Bid","price":"13742.75000","volume":"4"}', '{"level":12,"side":"Bid","price":"13742.50000","volume":"3"}', '{"level":13,"side":"Bid","price":"13742.25000","volume":"4"}', '{"level":14,"side":"Bid","price":"13742.00000","volume":"4"}', '{"level":15,"side":"Bid","price":"13741.75000","volume":"4"}', '{"level":16,"side":"Bid","price":"13741.50000","volume":"4"}', '{"level":17,"side":"Bid","price":"13741.25000","volume":"4"}', '{"level":18,"side":"Bid","price":"13741.00000","volume":"4"}', '{"level":19,"side":"Bid","price":"13740.75000","volume":"2"}']
import pandas as pd
您可以使用:
df=pd.Series(data)
最后使用apply()
和eval()
:
df=df.apply(lambda x:eval(x))
data=df.tolist()
最后:
df=pd.DataFrame(data).set_index('level')
現在如果你打印df
你會得到你想要的 output
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.