[英]Convert List of Dictionaries into Pandas DataFrame using keys as columns
I have a list of dictionaries of market data below, how do I convert it into a Pandas DataFrame using its 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"}',
]
You have a list of string representation of dicts.你有一个字典的字符串表示列表。 It is easier to convert to pandas dataframe if you can convert it to list of dicts.
如果您可以将其转换为字典列表,则更容易转换为 pandas dataframe。
For that you can use ast.literal_eval
which is safer than plain eval
like this为此,您可以使用
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 will look like this, 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'}]
As you can see it is a list of dicts.如您所见,它是一个字典列表。 Pandas can work on it easily.
Pandas 可以轻松处理它。 For converting to pandas dataframe do this,
要转换为 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
You can set level as index too if needed by doing,如果需要,您也可以将级别设置为索引,
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
You can use:您可以使用:
df=pd.Series(data)
Finally make use of apply()
and eval()
:最后使用
apply()
和eval()
:
df=df.apply(lambda x:eval(x))
data=df.tolist()
Finally:最后:
df=pd.DataFrame(data).set_index('level')
Now if you print df
you will get your desired output现在如果你打印
df
你会得到你想要的 output
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.