Python Pandas dict 到数据框(不工作)
Posted
技术标签:
【中文标题】Python Pandas dict 到数据框(不工作)【英文标题】:Python Pandas dict to dataframe (not working) 【发布时间】:2016-12-20 19:53:35 【问题描述】:我使用 Spyder 作为 Python IDE。我已经通过 API 下载了数据。 API 只允许将数据作为“dict”类型下载。 “Dict”类型有 3 个级别,即 Dict、Unicode、Dataframe。 我目前正在尝试将数据帧中的信息提取到一个单独的数据帧变量我打算导出到 SQLite。但是,我无法执行此操作,因为信息保存在“Dict”类型下并使用命令
frame4=pd.DataFrame.from_dict(response)
返回以下错误信息:
frame4=pd.DataFrame(response) Traceback(最近一次调用最后一次):
文件“”,第 1 行,在 frame4=pd.DataFrame(响应)
文件 “/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”, 第 224 行,在 init 中 mgr = self._init_dict(数据、索引、列、dtype=dtype)
文件 “/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”, 第 360 行,在 _init_dict 中 return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
文件 “/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”, 第 5236 行,在 _arrays_to_mgr arrays = _homogenize(arrays, index, dtype)
文件 “/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/frame.py”, 第 5546 行,在 _homogenize raise_cast_failure=False)
文件 “/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/series.py”, 第 2922 行,在 _sanitize_array subarr = _asarray_tuplesafe(data, dtype=dtype)
文件 "/Users/Sebster/anaconda/lib/python2.7/site-packages/pandas/core/common.py", 第 1407 行,在 _asarray_tuplesafe 中 result[:] = [tuple(x) for x in values]
ValueError: 无法将大小为 17 的序列复制到数组轴 维度 10
字典的内容,即dict(response)
给出以下输出:
u'allowance': u'allowanceExpiry': 554347,
u'remainingAllowance': 9960,
u'totalAllowance': 10000,
u'instrumentType': u'CURRENCIES',
u'prices': bid ask \
Open High Low Close Open High
DateTime
2016:08:12-21:50:00 11163.7 11164.6 11163.7 11164.1 11165.2 11165.6
2016:08:12-21:51:00 11164.2 11164.8 11163.7 11164.7 11165.7 11166.2
2016:08:12-21:52:00 11164.5 11165.3 11164.4 11165.1 11166.0 11166.6
2016:08:12-21:53:00 11165.0 11165.8 11164.3 11164.5 11166.5 11167.2
2016:08:12-21:54:00 11164.6 11165.4 11164.3 11164.7 11166.1 11166.9
2016:08:12-21:55:00 11164.6 11165.8 11164.1 11165.1 11166.1 11167.2
2016:08:12-21:56:00 11165.3 11165.3 11163.9 11163.9 11166.8 11166.8
2016:08:12-21:57:00 11164.1 11164.9 11163.4 11164.6 11165.6 11166.4
2016:08:12-21:58:00 11164.5 11165.2 11164.0 11164.9 11165.1 11166.2
2016:08:12-21:59:00 11161.3 11162.8 11157.9 11159.2 11166.3 11167.8
spread last \
Low Close Open High Low Close Open High
DateTime
2016:08:12-21:50:00 11164.7 11165.6 1.5 1.0 1.0 1.5 None None
2016:08:12-21:51:00 11165.2 11166.2 1.5 1.4 1.5 1.5 None None
2016:08:12-21:52:00 11165.8 11166.6 1.5 1.3 1.4 1.5 None None
2016:08:12-21:53:00 11165.8 11166.0 1.5 1.4 1.5 1.5 None None
2016:08:12-21:54:00 11165.8 11166.2 1.5 1.5 1.5 1.5 None None
2016:08:12-21:55:00 11165.6 11166.6 1.5 1.4 1.5 1.5 None None
2016:08:12-21:56:00 11165.4 11165.4 1.5 1.5 1.5 1.5 None None
2016:08:12-21:57:00 11164.3 11165.2 1.5 1.5 0.9 0.6 None None
2016:08:12-21:58:00 11164.6 11165.5 0.6 1.0 0.6 0.6 None None
2016:08:12-21:59:00 11162.9 11164.2 5.0 5.0 5.0 5.0 None None
Low Close Volume
DateTime
2016:08:12-21:50:00 None None 37
2016:08:12-21:51:00 None None 45
2016:08:12-21:52:00 None None 46
2016:08:12-21:53:00 None None 80
2016:08:12-21:54:00 None None 45
2016:08:12-21:55:00 None None 58
2016:08:12-21:56:00 None None 35
2016:08:12-21:57:00 None None 115
2016:08:12-21:58:00 None None 60
2016:08:12-21:59:00 None None 162
有人可以帮助我将数据帧从 Dict 变量中提取到单独的数据帧中吗?
【问题讨论】:
请发布字典 (response
)
并尝试使用:pd.DataFrame(response)
。
你好丹尼尔,我之前尝试过 pd.DataFrame(response) 语句。它返回相同的错误消息。
【参考方案1】:
查看您的response
dict - 键prices
的值似乎是一个DataFrame,因此无需再次构造它:
frame4 = response['prices']
或者简单地说:
import sqlalchemy
engine = sqlalchemy.create_engine('sqlite:///path/to/your_db.sqlite')
response['prices'].to_sql('table_name', engine, if_exists='replace')
【讨论】:
以上是关于Python Pandas dict 到数据框(不工作)的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确