gpt4 book ai didi

python - 如何将 dict 打印为 pandas.Series

转载 作者:行者123 更新时间:2023-11-30 22:54:34 25 4
gpt4 key购买 nike

我在我的包中使用了一些字典,这些字典很容易成为pandas.Series。但是,我将它们保留为 dicts 只是因为 .update 方法,该方法既更改现有值,又向字典添加新值。 pandas.Series.update 仅更改原位值。所以我被迫使用字典(至少我认为)。

问题在于,当您使用打印功能打印字典时,它们很难阅读,因此我想为用户打印得更好。我知道如何做到这一点的唯一方法是创建一个仅用于打印字典的函数,我想避免这种情况。有没有什么办法可以让我本质上改变字典,以便在运行一些命令后,每个字典都打印得更好?也许甚至可以快速将它们转换成 pandas 系列以供打印,因为我的字典非常小。类似的东西

def _print_dict(self):
print(pd.Series(self))

然后我可以把它扔到某个地方,比如

dict.__print_method__ = _print_dict

如果__print_method__是打印函数在打印字典时调用的方法。

最佳答案

在Python3中,print是一个函数。在Python2.7中,print是一个语句,但是如果你在脚本顶部声明from __future__ import print_function,那么print就变成了一个功能。可以重新定义函数:

from __future__ import print_function
import pandas as pd
try: import builtins
except ImportError: import __builtin__ as builtins

def print(*args, **kwargs):
args = [item if not isinstance(item, (dict,)) else pd.Series(item)
for item in args]
builtins.print(*args, **kwargs)


print({'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'})
print(2,3,4, sep=' -- ')

产量

cheese      stilton
ride coconuts
swallow african
dtype: object
2 -- 3 -- 4
<小时/>

顺便说一下,dictdefined in C 。特别是它的 __repr__defined in C 。当 __str__ method is empty ,默认情况下使用 __repr__ 生成对象的字符串表示形式。

C 定义对象的特殊方法,例如 __str____repr__ 无法进行 Monkeypatched:

dct = {'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'}
def mystr(self):
return str(pd.Series(self))

dct.__str__ = mystr

加薪

AttributeError: 'dict' object attribute '__str__' is read-only

如果 dct 是 Python 定义的类的实例,那么情况就会有所不同。可以定义、覆盖或猴子修补此类类的特殊方法:

import pandas as pd
class MyDict(dict):
def __str__(self):
return str(pd.Series(self))

dct = {'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'}
mydct = MyDict(dct)
print(mydct)

产量

cheese      stilton
ride coconuts
swallow african
dtype: object

但是要使用它需要将所有字典更改为 MyDicts。这比重新定义 print 函数要困难得多。

(顺便说一句,请注意其中有 hidden pitfalls to subclassing dict properly 。例如,如果您重新定义 __setitem__ 但没有重新定义 update,则 update不会调用您的 __setitem__ 方法。)

关于python - 如何将 dict 打印为 pandas.Series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37727379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com