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】:

您可以使用字典迭代器定义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

【讨论】:

【参考方案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 的元组的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中将dict元素值作为列表

python pandas数据框列转换为dict键和值

Python Pandas dict 到数据框(不工作)

使用带有 python/pandas 的 dict 理解与 str.contains 进行部分字符串匹配

Pandas 数据框到 dict 的 dict

Pandas - 将值作为字符串类型转换为浮点数