Python将dict值作为pandas DataFrame的元组

时间:2017-09-06 14:35:59

标签: python pandas dictionary tuples

我有以下词典:

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之间的百分比差异。

4 个答案:

答案 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)

您可以使用字典迭代器定义dataindex

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