从字典中以 index: list of row values 的形式构造 Pandas DataFrame

Posted

技术标签:

【中文标题】从字典中以 index: list of row values 的形式构造 Pandas DataFrame【英文标题】:Construct Pandas DataFrame from dictionary in form index: list of row values从字典中以 index: list of row values 的形式构造 Pandas DataFrame 【发布时间】:2015-02-24 06:55:47 【问题描述】:

我已经设法做到这一点:

dft = pd.DataFrame.from_dict(
                    0: [50, 45, 00, 00], 
                    1: [53, 48, 00, 00],
                    2: [56, 53, 00, 00],
                    3: [54, 49, 00, 00],
                    4: [53, 48, 00, 00],
                    5: [50, 45, 00, 00]
                    , orient='index'
                    )

这样完成,构造函数看起来就像 DataFrame 一样,易于阅读/编辑:

>>> dft
    0   1   2   3
0   50  45  0   0
1   53  48  0   0
2   56  53  0   0
3   54  49  0   0
4   53  48  0   0
5   50  45  0   0

但DataFrame.from_dict constructor 没有列参数,因此为列提供合理的名称需要额外的步骤:

dft.columns = ['A', 'B', 'C', 'D']

对于这样一种方便(例如,用于单元测试)初始化 DataFrames 的方法来说,这似乎很笨重。

所以我想知道:有没有更好的方法?

【问题讨论】:

【参考方案1】:

或者,您可以使用DataFrame.from_items() 从您的字典中构造 DataFrame;这允许您同时传入列名。

例如,如果d 是您的字典:

d = 0: [50, 45, 0, 0],
     1: [53, 48, 0, 0],
     2: [56, 53, 0, 0],
     3: [54, 49, 0, 0],
     4: [53, 48, 0, 0],
     5: [50, 45, 0, 0]

数据是d.items(),方向又是'index'。字典键成为索引值:

>>> pd.DataFrame.from_items(d.items(), 
                            orient='index', 
                            columns=['A','B','C','D'])
    A   B  C  D
0  50  45  0  0
1  53  48  0  0
2  56  53  0  0
3  54  49  0  0
4  53  48  0  0
5  50  45  0  0

在 Python 2 中,您可以使用 d.iteritems() 来生成字典的内容,以避免在内存中创建另一个列表。

【讨论】:

【参考方案2】:

一种方法如下:

df = pd.DataFrame.from_dict(
0: "A":50, "B":40,
1: "A":51, "B":30, orient='index')

但是,对于快速测试初始化​​,我可能更喜欢您的方式 + 然后设置列。

【讨论】:

【参考方案3】:

你可以试试:

x=pd.DataFrame(0:[50,45],1:[53,48],2:[56,53], index=["A","B"]).transpose()

但这仍然很奇怪,因为您将标准索引指定为字典的键。

为什么不直接

x = pd.DataFrame("A":[50,53,56],"B":...)

【讨论】:

"为什么不直接 x = pd.DataFrame("A":[50,53,56],"B":...)"?正如问题所述,只是为了将初始化中的数字保持在与df相同的位置...... 标准索引键只是占位符,以保持示例简单。可能我需要使用日期时间对象。

以上是关于从字典中以 index: list of row values 的形式构造 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用isna函数和any函数计算返回dataframe中包含缺失值的行索引列表list(index of rows with missing values in dataframe)

pandas使用isna函数和any函数计算返回dataframe中包含缺失值的行索引列表list(index of rows with missing values in dataframe)

LeetCode 599. Minimum Index Sum of Two Lists (从两个lists里找到相同的并且位置总和最靠前的)

Pytorch 错误“RuntimeError: index out of range: 试图访问索引 512 out of table with 511 rows”

python 列表 越界怎么处理?list index out of range

从具有可变长度的列表字典创建数据框