Python dict 将值作为 pandas DataFrame 的元组
Posted
技术标签:
【中文标题】Python dict 将值作为 pandas DataFrame 的元组【英文标题】:Python dict with values as tuples to pandas DataFrame 【发布时间】:2018-02-15 02:39:41 【问题描述】:我有以下字典:
td = 'q1':(111,222), 'q2':(333,444)
我想将其转换为如下所示的数据框:
Query Value1 Value2
q1 111 222
q2 333 444
我尝试了以下方法:
df = pd.DataFrame(td.items())
结果如下:
0 1
0 q1 (111,222)
1 q2 (333,444)
如果不是很明显,我是 python 和 pandas 的新手。如何获取具有元组值的字典以在数据框中充当单独的列?
我的最终目标是显示 value1 和 value2 之间的百分比差异。
【问题讨论】:
【参考方案1】:设置
td = 'q1':(111,222), 'q2':(333,444)
选项 1
pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value').reset_index()
Query Value0 Value1
0 q1 111 222
1 q2 333 444
选项 2
from cytoolz.dicttoolz import merge
pd.DataFrame(
[merge(
'Query': k,
'Value'.format(i): x for i, x in enumerate(v, 1)
) for k, v in td.items()]
)
Query Value1 Value2
0 q1 111 222
1 q2 333 444
对评论的回应
df = pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value')
df.assign(PctChg=df.pct_change(axis=1).iloc[:, -1]).reset_index()
Query Value0 Value1 PctChg
0 q1 111 222 1.000000
1 q2 333 444 0.333333
或者
df = pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value')
df.eval('PctChg = Value1 / Value0 - 1', inplace=False).reset_index()
Query Value0 Value1 PctChg
0 q1 111 222 1.000000
1 q2 333 444 0.333333
【讨论】:
我喜欢你的第一个选项 ;) 我尝试了选项 1。我收到错误“行继续符后出现意外字符”。 我将字典替换为您提供的名称td
,因此您不应再有续行了。
谢谢!请稍等一下,我会弄清楚如何将您的回复标记为答案...
我的最后一步是添加第四列,即 Value1 和 Value2 之间的百分比变化。有没有办法轻松做到这一点?【参考方案2】:
您可以使用字典迭代器定义data
和index
:
import pandas as pd
td = 'q1':(111,222), 'q2':(333,444)
pd.DataFrame(data=list(td.values()), index=list(td.keys()))
应该产生一个DataFrame:
0 1
q1 111 222
q2 333 444
【讨论】:
【参考方案3】:使用from_dict
:
pd.DataFrame.from_dict('q1':(111,222), 'q2':(333,444), orient='index')
返回:
0 1
q1 111 222
q2 333 444
输入一些格式:
df.columns = 'Value' + df.columns.to_series().add(1).astype(str)
df.index.name = 'Query'
你得到:
Value1 Value2
Query
q1 111 222
q2 333 444
【讨论】:
【参考方案4】:试试这个?
td = 'q1':(111,222), 'q2':(333,444)
df = pd.DataFrame(td).T
df
Out[25]:
0 1
q1 111 222
q2 333 444
【讨论】:
pd.DataFrame(td).T.rename(columns=lambda x: x + 1).add_prefix('Value')
以上是关于Python dict 将值作为 pandas DataFrame 的元组的主要内容,如果未能解决你的问题,请参考以下文章