R 的 dput() 函数的 Python 等价物

Posted

技术标签:

【中文标题】R 的 dput() 函数的 Python 等价物【英文标题】:Python's equivalent for R's dput() function 【发布时间】:2014-04-20 13:32:52 【问题描述】:

python中有没有类似R中dput() function的函数?

【问题讨论】:

可能是pickle 模块? ***.com/a/41189949/850781 【参考方案1】:

将 Python 对象序列化为文件有多种选择:

json.dump() 以 JSON 格式存储数据。它非常可读和可编辑,但只能存储列表、字典、字符串、数字、布尔值,因此没有复合对象。您需要先import json 才能使json 模块可用。 pickle.dump() 可以存储大部分对象。

不太常见:

shelve 模块将多个 Python 对象存储在 DBM 数据库中,主要表现为持久化dictmarshal.dump(): 不知道你什么时候需要。

【讨论】:

由于这是一个初学者的问题,请您澄清它是否需要import json 或类似的东西。我也在pandas.DataFrame 上试了一下,得到了dump() missing 1 required positional argument: 'fp' ...【参考方案2】:

IMO,json.dumps()(注意 s)更好,因为它返回一个字符串,而 json.dump() 需要您写入文件。

【讨论】:

你能提供更多关于如何使用它的细节吗?【参考方案3】:

对于pandas.DataFrameprint(df.to_dict()),如图here。

然后返回df = pandas.DataFrame.from_dict(data_as_dict)

【讨论】:

很好的答案!这正是我想要的。【参考方案4】:

此答案侧重于 json.dump()json.dumps() 以及如何将它们与 numpy 数组一起使用。如果你尝试,Python 会告诉你 ndarrays 不是 JSON 可序列化的错误:

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

您可以通过先将其转换为列表来避免这种情况。请参阅下面的两个工作示例:

json.dumps()

json.dumps() 似乎最接近 R 的 dput(),因为它允许您直接从控制台复制粘贴结果:

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

json.dump()

json.dump()dput() 不一样,但它仍然非常有用。 json.dump() 会将您的对象编码为 json 文件。

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

然后您可以在其他地方解码:

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

然后你可以再次将它转换回一个 numpy 数组:

c = np.array(c)

更多信息

关于避免“不可序列化”错误,请参阅:

numpy array is not json serializable

how to make classes json serializable(有点不相关,但很有趣)

【讨论】:

谢谢,作为标准numpy.array 输出,获取矩阵中每行一行格式的矩阵的正确参数是什么?我试图将indentseparators 参数传递给json.dumps,但没有成功。【参考方案5】:

怎么没人提到repr() 对我来说是个谜。 repr() 几乎与 R 的 dput() 完全一样。举几个例子:

>>> 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)'

【讨论】:

同意@JonasV,这是正确答案 还是比不上dput,因为它不保留列的数据类型:/

以上是关于R 的 dput() 函数的 Python 等价物的主要内容,如果未能解决你的问题,请参考以下文章

R 是不是有与 Python 中的 reduce() 等价的东西?

相当于R的qnorm,qf和qchi2的python

R 在 Python 中的 browser() 等价物

Pandas 等价于 R 的 which()

等价于 python 的 auto.arima()

python 中的 str_replace_all() r 等价物