Pandas:从 dict 在 DataFrame 中创建命名列

Posted

技术标签:

【中文标题】Pandas:从 dict 在 DataFrame 中创建命名列【英文标题】:Pandas: create named columns in DataFrame from dict 【发布时间】:2013-12-18 21:38:32 【问题描述】:

我有一个字典对象的形式:

my_dict = id1: val1, id2: val2, id3: val3, ...

我想将它创建到一个 DataFrame 中,我想将 2 列命名为“business_id”和“business_code”。

我试过了:

business_df = DataFrame.from_dict(my_dict,orient='index',columns=['business_id','business_code'])

但它说from_dict 不接受列参数。

TypeError: from_dict() 得到了一个意外的关键字参数 'columns'

【问题讨论】:

【参考方案1】:

您可以遍历项目:

In [11]: pd.DataFrame(list(my_dict.items()),
                      columns=['business_id','business_code'])
Out[11]: 
  business_id business_code
0         id2          val2
1         id3          val3
2         id1          val1

【讨论】:

my_dict.items() 用于 Python 3 这并不能完全回答问题,因为文档指定可以使用 columns 关键字参数:pandas.pydata.org/pandas-docs/stable/generated/… 检查版本,在0.23.0中可用【参考方案2】:

这样做:

创建数据框

df = pd.DataFrame(data_as_2d_ndarray)

从字典中创建列名的排序列表 - 根据需要调整键 karg 以从字典中获取排序值,显然字典中的数据必须具有一致的形状

col_names = sorted(list(col_dict.iteritems()),key=lambda x:x[0])

重塑并设置列名

df.columns  = zip(*col_names)[1]

【讨论】:

【参考方案3】:

要获得与文档相同的功能并避免使用代码变通方法,请确保您使用的是最新版本的 Pandas。我最近在运行 Pandas 教程中的一行代码时遇到了同样的错误:

pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]),orient='index', columns=['one', 'two', 'three'])

我检查了 Pandas 的版本,发现我运行的是版本 22,而版本 23 可用。

import pandas as pd
pd.__version__
Out[600]: '0.22.0'

我使用 pip 升级了:

c:\pip install --upgrade pandas

我确认我的版本已更新到 23,并且相同的 from_dict() 代码可以正常工作。无需修改代码。

【讨论】:

【参考方案4】:

这是关于你遇到的 TypeError 的。根据 Pandas 文档,仅当 orient = 'index' 时, from_dict 才会采用关键字 'columns'。

【讨论】:

【参考方案5】:

From version 0.23.0,可以在from_dict中指定columns参数:

my_dict = id1: val1, id2: val2, id3: val3, ...
prepared_dict = i: x for i, x in enumerate(my_dict.items())
df = pd.DataFrame.from_dict(prepared_dict, orient='index', columns=['business_id', 'business_code'])

注意:我也在this similar question上以实物形式回答。

【讨论】:

我使用 pandas 0.24.2 和 Python 3.6.8 尝试过这个错误:ValueError: Shape of passed values is (3, 1), indices imply (3, 2) @anthls 这没有足够的信息来解决您的问题,我认为这不是from_dict 的直接结果。如果您在 Stack Overflow 上寻求帮助,我建议您单独提出一个问题。 抱歉,如果我不清楚 - 我想让你和其他人知道我已经尝试过你的答案,但它对我没有用。我使用了以下代码(使用 pandas 0.24.2 和 Python 3.6.8):import pandas as pd my_dict = "id1": "val1", "id2": "val2", "id3": "val3" df = pd.DataFrame.from_dict(my_dict, orient='index', columns=['business_id', 'business_code']) 并得到了我提到的错误(我省略了完整的堆栈跟踪)。我使用了接受的答案并且它有效,所以我不需要解决我的问题,但我认为您可能想知道。 @anthls 我明白你现在的意思了,谢谢。我已经更新了答案。

以上是关于Pandas:从 dict 在 DataFrame 中创建命名列的主要内容,如果未能解决你的问题,请参考以下文章

从冗长的字典生成时,Pandas DataFrame.from_dict() 性能不佳

如何从包含Python3中特定索引和列的列表的dict创建Pandas DataFrame?

[python][pandas]DataFrame的基本操作

pandas之DataFrame与Dict的相互转换

将字典值增量添加到 pandas DataFrame。具有dict键列名的DataFrame

将dict的dict转换为pandas DataFrame - 内存问题