从字典创建熊猫数据框

Posted

技术标签:

【中文标题】从字典创建熊猫数据框【英文标题】:Creating a pandas dataframe from a dictionary 【发布时间】:2014-11-22 08:14:48 【问题描述】:

我想从dict 创建一个DataFrame,其中dict keys 将是列名,dict values 将是行。我正在尝试使用pandas.DataFrame.from_dict() 来转换我的字典。这是我的代码:

import pandas as pd
import datetime

current_time1 = datetime.datetime.now()
record_1 = 'Date':current_time1, 'Player':'John','Difficulty':'hard', 'Score':0
df = pd.DataFrame.from_dict(record_1, orient='columns')
display(df)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-597ef27e82c8> in <module>()
      1 record_1 = 'Date':current_time1, 'Player':'John','Difficulty':'hard', 'Score':0
----> 2 df = pd.DataFrame.from_dict(record_1, orient='columns')
      3 display(df)

C:\Users\Jason\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in from_dict(cls, data, orient, dtype)
    635             raise ValueError('only recognize index or columns for orient')
    636 
--> 637         return cls(data, index=index, columns=columns, dtype=dtype)
    638 
    639     def to_dict(self, outtype='dict'):

C:\Users\Jason\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in __init__(self, data, index, columns, dtype, copy)
    201                                  dtype=dtype, copy=copy)
    202         elif isinstance(data, dict):
--> 203             mgr = self._init_dict(data, index, columns, dtype=dtype)
    204         elif isinstance(data, ma.MaskedArray):
    205             import numpy.ma.mrecords as mrecords

C:\Users\Jason\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in _init_dict(self, data, index, columns, dtype)
    325 
    326         return _arrays_to_mgr(arrays, data_names, index, columns,
--> 327                               dtype=dtype)
    328 
    329     def _init_ndarray(self, values, index, columns, dtype=None,

C:\Users\Jason\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in _arrays_to_mgr(arrays, arr_names, index, columns, dtype)
   4618     # figure out the index, if necessary
   4619     if index is None:
-> 4620         index = extract_index(arrays)
   4621     else:
   4622         index = _ensure_index(index)

C:\Users\Jason\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\frame.pyc in extract_index(data)
   4657 
   4658         if not indexes and not raw_lengths:
-> 4659             raise ValueError('If using all scalar values, you must must pass'
   4660                              ' an index')
   4661 

ValueError: If using all scalar values, you must must pass an index

我不明白这个错误,在the docs 中对于pandas.DataFrame.from_dict 没有索引参数。另外,我认为如果未提供索引pandas 将使用 1..x?如何传递索引?

补充信息:最后我想使用日期列作为索引。

【问题讨论】:

【参考方案1】:

如果每个 dict 代表一行,您可以将 dicts 列表 传递给 pd.DataFrame:

In [37]: pd.DataFrame([record_1])
Out[37]: 
                        Date Difficulty Player  Score
0 2014-09-27 08:26:16.950192       hard   John      0

【讨论】:

以上是关于从字典创建熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫从嵌套字典创建数据框?

从两个熊猫数据框创建一个python字典

Python:如何从熊猫数据框创建字典? [复制]

如何从熊猫数据框中创建一个字典?

从嵌套字典构造熊猫多索引数据框

创建具有不相等值列表的熊猫数据框