Pandas:从字典中创建DataFrame带有命名列

38

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

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

我想将这些内容创建成一个DataFrame,其中我想将两列命名为'business_id'和'business_code'。

我尝试过:

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

但是它说from_dict不接受columns参数。

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

5个回答

37

您可以遍历这些项目:

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

23
my_dict.items() 是 Python 3 中的一个方法,用于返回一个字典中所有键值对的列表。 - Manuel
7
这并没有完全回答问题,因为文档指定可以使用"columns"关键字参数:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html - Nolan Conaway
请检查版本,它在0.23.0可用。 - Aquib

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

要获得与文档相同的功能并避免使用代码解决方法,请确保您正在使用最新版本的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

从版本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'])

注意: 我也在这个类似的问题中给出了相同的答案。

1
我使用 pandas 0.24.2 和 Python 3.6.8 尝试了这个,但是出现了以下错误: ValueError: Shape of passed values is (3, 1), indices imply (3, 2) - anthls
@anthls 这并不足以解决你的问题,我认为这并不是直接由 from_dict 引起的。如果你在 Stack Overflow 上寻求帮助,我建议你提出一个单独的问题。 - Ninjakannon
抱歉如果我表述不清楚,我想让你和其他人知道我尝试了你的答案,但对我没有用。我使用了以下代码(使用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
@anthls 我现在明白你的意思了,谢谢。我已经更新了答案。 - Ninjakannon

0
关于您遇到的 TypeError,根据 Pandas 文档,from_dict 只会在 orient = 'index' 时接受关键字 'columns'。

0
做这个:
创建数据框。
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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接