如何将字典元组转换为有组织的数据框?
Posted
技术标签:
【中文标题】如何将字典元组转换为有组织的数据框?【英文标题】:How can I convert tuple of dictionaries into an organized dataframe? 【发布时间】:2020-04-14 09:16:37 【问题描述】:我正在提取一个以以下格式检索数据的 API。
data = ('2019-12-20': 'SMA': '216.0037',
'2019-12-19': 'SMA': '215.4711',
'2019-12-18': 'SMA': '214.9335',
'2019-12-17': 'SMA': '214.4074')
目前,当我尝试运行“data = pd.DataFrame(data)”时,它会返回一个包含 2 行的数据框,该数据框将每个日期用作单独的列,并为每一行提供一个字典作为值(下面的示例)。
2019-12-20 | 2019-12-19 | 2019-12-18
0 " 'SMA' : '216.0037' | 'SMA': '215.4710" | 'SMA': '214.9335'
1 NaN | NaN | NaN
我想弄清楚如何将这些数据转换为以下格式的数据框。
date | SMA
----------------------------
0 '2019-12-20' | '216.0036'
1 '2019-12-19' | '215.4711'
2 '2019-12-18' | '214.9335'
3 '2019-12-17' | '214.4047'
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:IIUC
pd.DataFrame(data).T.reset_index().rename(columns='index':'date')
date SMA
0 2019-12-20 216.0037
1 2019-12-19 215.4711
2 2019-12-18 214.9335
3 2019-12-17 214.4074
或from_dict
pd.DataFrame.from_dict(data,'index').reset_index().rename(columns='index':'date')
SMA
2019-12-17 214.4074
2019-12-18 214.9335
2019-12-19 215.4711
2019-12-20 216.0037
【讨论】:
【参考方案2】:从您的代码看来,数据是一个字典(外括号被忽略)。
data = (
'2019-12-20': 'SMA': '216.0037',
'2019-12-19': 'SMA': '215.4711',
'2019-12-18': 'SMA': '214.9335',
'2019-12-17': 'SMA': '214.4074'
)
assert isinstance(data, dict)
如果是这样,那么您想要的数据框可以按如下方式生成。
pd.DataFrame(
[(k, v['SMA']) for k, v in data.items()],
columns=['date', 'SMA']
)
输出:
date SMA
0 2019-12-20 216.0037
1 2019-12-19 215.4711
2 2019-12-18 214.9335
3 2019-12-17 214.4074
【讨论】:
【参考方案3】:您可以使用 pandas.DataFrame.T 实现此目的
通过将行写入列来反映 DataFrame 在其主对角线上,反之亦然。属性 T 是方法的访问器。
df = pd.DataFrame(data).T.reset_index().rename(columns='index':'date')
将返回:
date SMA
0 2019-12-20 216.0037
1 2019-12-19 215.4711
2 2019-12-18 214.9335
3 2019-12-17 214.4074
【讨论】:
以上是关于如何将字典元组转换为有组织的数据框?的主要内容,如果未能解决你的问题,请参考以下文章