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

49

3
可能是pickle模块吗? - BrenBarn
https://dev59.com/O2Ij5IYBdhLWcg3wk182#41189949 - sds
5个回答

28

对于一个 pandas.DataFrame,使用 print(df.to_dict()) 命令可以打印出其内容,示例可以参考这里

将字典转换为数据框的命令是 df = pandas.DataFrame.from_dict(data_as_dict)


2
很棒的答案!这正是我在寻找的。 - Andrew Brēza
@PatrickT,你知道如何使用其他对象(例如字典)来完成这个任务吗? - Álvaro A. Gutiérrez-Vargas
如果我理解你的问题,print(d) 就可以做到。你也可以使用 d.keys()d.values() 分别输出键和值。也许你的问题更复杂?也可以看看这个链接:https://dev59.com/XXA75IYBdhLWcg3wkJ31 - PatrickT

13

有几种选项可以将Python对象序列化到文件中:

  • json.dump() 以JSON格式存储数据。它很容易读取和编辑,但只能存储列表、字典、字符串、数字、布尔值,因此不能存储复合对象。您需要先导入json模块才能使用它。
  • pickle.dump() 可以存储大多数对象。

不太常见的:

  • shelve 模块将多个Python对象存储在DBM数据库中,主要像持久的dict
  • marshal.dump(): 不确定何时需要使用这个函数。

1
由于这是一个初学者的问题,您能否澄清它是否需要“import json”或类似内容。此外,我尝试在“pandas.DataFrame”上运行它,并得到“dump() missing 1 required positional argument: 'fp'”。 - PatrickT
1
@ChristianAichinger,你能举个例子吗?我同意@PatrickT的说法,因为我也遇到了相同的错误“dump() missing 1 required positional argument: 'fp'”。 - Álvaro A. Gutiérrez-Vargas

10

我很惊讶为什么还没有人提到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)'

1
同意@JonasV的观点,这是正确的答案。 - Kevin Burnham
4
dput相比,它仍然不如优秀,因为它无法保持列的数据类型 :/ - user3507584

7
本答案重点介绍如何使用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输出一样?我尝试使用json.dumps传递indentseparators参数,但没有成功。 - Paul Rougieux

0
在我看来,json.dumps()(注意s)更好,因为它返回一个字符串,而不是像json.dump()那样需要你写入文件。

2
你能提供更多关于如何使用这个的细节吗? - Hack-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接