我有以下词典:
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之间的百分比差异。
答案 0 :(得分:15)
设置
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 :(得分:13)
试试这个?
td = {'q1':(111,222), 'q2':(333,444)}
df = pd.DataFrame(td).T
df
Out[25]:
0 1
q1 111 222
q2 333 444
答案 2 :(得分:5)
使用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
答案 3 :(得分:3)
您可以使用字典迭代器定义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