Python将dict值作为pandas DataFrame的元组

ift*_*hen 16 python dictionary tuples pandas

我有以下词典:

td = {'q1':(111,222), 'q2':(333,444)}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为如下所示的数据框:

Query    Value1     Value2
q1       111       222
q2       333       444
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

df = pd.DataFrame(td.items())
Run Code Online (Sandbox Code Playgroud)

结果如下:

    0         1
0   q1  (111,222)
1   q2  (333,444) 
Run Code Online (Sandbox Code Playgroud)

如果不是很明显,我是python和pandas的新手.如何将具有值作为元组的字典作为数据框中的单独列来运行?

我的最终目标是显示value1和value2之间的百分比差异.

piR*_*red 16

建立

td = {'q1':(111,222), 'q2':(333,444)}
Run Code Online (Sandbox Code Playgroud)

选项1

pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value').reset_index()

  Query  Value0  Value1
0    q1     111     222
1    q2     333     444
Run Code Online (Sandbox Code Playgroud)

选项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
Run Code Online (Sandbox Code Playgroud)

对评论的回应

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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 13

试试这个 ?

td = {'q1':(111,222), 'q2':(333,444)}
df = pd.DataFrame(td).T
df
Out[25]: 
      0    1
q1  111  222
q2  333  444
Run Code Online (Sandbox Code Playgroud)


Ian*_*anS 5

使用from_dict:

pd.DataFrame.from_dict({'q1':(111,222), 'q2':(333,444)}, orient='index')
Run Code Online (Sandbox Code Playgroud)

返回:

      0    1
q1  111  222
q2  333  444
Run Code Online (Sandbox Code Playgroud)

抛出一些格式:

df.columns = 'Value' + df.columns.to_series().add(1).astype(str)
df.index.name = 'Query'
Run Code Online (Sandbox Code Playgroud)

你得到:

       Value1  Value2
Query                
q1        111     222
q2        333     444
Run Code Online (Sandbox Code Playgroud)