如何解决python生成器到pandas数据框
我有一个发电机返回:
data = public_client.get_product_trades(product_id='BTC-USD',limit=10)
如何将数据转换为 Pandas 数据框?
DOCSTRING 方法读取:
"""{"Returns": [{
"time": "2014-11-07T22:19:28.578544Z","trade_id": 74,"price": "10.00000000","size": "0.01000000","side": "buy"
},{
"time": "2014-11-07T01:08:43.642366Z","trade_id": 73,"price": "100.00000000","side": "sell"
}]}"""
我试过了:
df = [x for x in data]
df = pd.DataFrame.from_records(df)
但它不起作用,因为我收到错误:
AttributeError: 'str' object has no attribute 'keys'
当我打印上面的“x for x in data”时,我看到了字典列表,但结尾看起来很奇怪,这可能是为什么?
print(list(data))
[{'time': '2020-12-30T13:04:14.385Z','trade_id': 116918468,'price': '27853.82000000','size': '0.00171515','side': 'sell'},{'time': '2020-12-30T12:31:24.185Z','trade_id': 116915675,'price': '27683.70000000','size': '0.01683711','message']
它看起来是一个字典列表,但最终值是一个字符串“message”。
解决方法
基于更新的问题:
df = pd.DataFrame(list(data)[:-1])
或者,更简洁:
df = pd.DataFrame([x for x in data if isinstance(x,dict)])
print(df)
time trade_id price size side
0 2020-12-30T13:04:14.385Z 116918468 27853.82000000 0.00171515 sell
1 2020-12-30T12:31:24.185Z 116915675 27683.70000000 0.01683711 sell
哦,顺便说一句,您仍然需要将这些字符串更改为可用的内容...
例如:
df['time'] = pd.to_datetime(df['time'])
for k in ['price','size']:
df[k] = pd.to_numeric(df[k])
,
您可以访问字典中的值并从中构建数据框(虽然不是特别干净):
cmdDestRoad = conRouteMapping.CreateCommand
cmdDestRoad.CommandText = "Select roadref from lane where uniqueref='" & LaneRef.ToString & "'"
,
直接使用 pd.DataFrame
构造函数:
#list_of_dicts = [{
# "time": "2014-11-07T22:19:28.578544Z",# "trade_id": 74,# "price": "10.00000000",# "size": "0.01000000",# "side": "buy"
# },{
# "time": "2014-11-07T01:08:43.642366Z",# "trade_id": 73,# "price": "100.00000000",# "side": "sell"
#}]
# or if you take it from 'data'
list_of_dicts = data[:-1]
df = pd.DataFrame(list_of_dicts)
df
Out[4]:
time trade_id price size side
0 2014-11-07T22:19:28.578544Z 74 10.00000000 0.01000000 buy
1 2014-11-07T01:08:43.642366Z 73 100.00000000 0.01000000 sell
更新
根据问题更新,您的json数据似乎仍然是字符串...
import json
data = json.loads(data)
data = data['Returns']
pd.DataFrame(data)
time trade_id price size side
0 2014-11-07T22:19:28.578544Z 74 10.00000000 0.01000000 buy
1 2014-11-07T01:08:43.642366Z 73 100.00000000 0.01000000 sell
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。