sitems
sitems

Reputation: 788

Python's equivalent for R's dput() function

Is there any function in python similar to dput() function in R?

Upvotes: 56

Views: 2990

Answers (5)

PatrickT
PatrickT

Reputation: 10530

for a pandas.DataFrame, print(df.to_dict()), as shown here and detailed in the manual.

And back again with df = pandas.DataFrame.from_dict(data_as_dict)

The default output style is 'orient=dict', but if you prefer 'orient=list', then:

print(df.to_dict('list'))

Upvotes: 31

JonasV
JonasV

Reputation: 1031

How no one has mentioned repr() yet is a mystery to me. repr() does almost exactly what R's dput() does. Here's a few examples:

>>> a = np.arange(10)
>>> repr(a)
'array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])'
>>> d = dict(x=1, y=2)
>>> repr(d)
"{'x': 1, 'y': 2}"
>>> b = range(10)
>>> repr(b)
'range(0, 10)'

Upvotes: 11

KenHBS
KenHBS

Reputation: 7174

This answer focuses on json.dump() and json.dumps() and how to use them with numpy arrays. If you try, Python will hit you with an error saying that ndarrays are not JSON serializable:

import numpy as np
import json

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
json.dumps(a)
TypeError: Object of type 'ndarray' is not JSON serializable

You can avoid this by translating it to a list first. See below for two working examples:

json.dumps()

json.dumps() seems to be the closest to R's dput() since it allows you to copy-paste the result straight from the console:

json.dumps(a.tolist()) # '[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'

json.dump()

json.dump() is not the same as dput() but it's still very useful. json.dump() will encode your object to a json file.

# Encode:
savehere = open('file_location.json', 'w')
json.dump(a.tolist(), savehere)

which you can then decode elsewhere:

# Decode:
b = open('file_location.json', 'r').read()   # b is '[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'
c = json.loads(b)

Then you can transform it back a numpy array again:

c = np.array(c)

More information

on avoiding the 'not serializable' error see:

Upvotes: 7

Christian Aichinger
Christian Aichinger

Reputation: 7237

There are several options for serializing Python objects to files:

  • json.dump() stores the data in JSON format. It is very read- and editable, but can only store lists, dicts, strings, numbers, booleans, so no compound objects. You need to import json before to make the json module available.
  • pickle.dump() can store most objects.

Less common:

  • The shelve module stores multiple Python objects in a DBM database, mostly acting like a persistent dict.
  • marshal.dump(): Not sure when you'd ever need that.

Upvotes: 13

Jas
Jas

Reputation: 834

IMO, json.dumps() (note the s) is even better since it returns a string, as opposed to json.dump() which requires you to write to a file.

Upvotes: 0

Related Questions