Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a pandas dataframe from a dictionary

I'd like to create a DataFrame from a dict where the dict keys will be the column names and the dict values will be the rows. I'm trying to use pandas.DataFrame.from_dict() to convert my dictionary. Here's my code:

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

I don't understand the error, in the docs for pandas.DataFrame.from_dict there's no index argument. Also, I thought that if an index isn't supplied pandas would use 1..x? How can I pass an index?

Additional information: I'd like to use the date column as the index in the end.

like image 235
Jason Avatar asked Sep 27 '14 12:09

Jason


1 Answers

If each dict represents a row, you could pass a list of dicts to 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
like image 87
unutbu Avatar answered Oct 20 '22 19:10

unutbu