熊猫来自pandas.core.frame.Pandas对象

chr*_*ise 5 pandas

我有一个pandas.core.frame.Pandas对象,需要根据其属性名称从中返回一个值。下面的代码有效

val = pandas_object.attr_name
Run Code Online (Sandbox Code Playgroud)

但是,我需要更改属性,所以我需要动态的东西,例如

val = pandas_object.get(attr_name)
Run Code Online (Sandbox Code Playgroud)

熊猫objecet没有getter函数,因为我收到以下错误

AttributeError: 'Pandas' object has no attribute 'get'
Run Code Online (Sandbox Code Playgroud)

其他熊猫班似乎也有这种情况。http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.get.html

我找不到有关这种类型的Oaf Pandas对象的大量文档。有没有办法获得类似于.get()的值?

这是我的对象

Pandas(Index=0, Time_USec=Timestamp('2016-12-19 09:05:00.683243'), OrderId=0, Status='New')
Run Code Online (Sandbox Code Playgroud)

当我遵循adget使用getattr时,出现以下错误

print event.__getattr__("Time_USec")
Run Code Online (Sandbox Code Playgroud)

AttributeError:'Pandas'对象没有属性' getattr '

小智 10

您提到的 Pandas 类实际上是一个动态创建的命名元组类(请参见此处)。默认情况下,该类被命名为“Pandas”,但您实际上可以将其命名为您想要的任何名称,如下所示:

my_tuples = list(df.itertuples(name='Whatever'))
assert isinstance(my_tuples[0], tuple)
assert my_tuples[0].__class__.__name__ == 'Whatever'
Run Code Online (Sandbox Code Playgroud)

正如您从命名元组的官方文档中看到的,您可以将它们转换为字典,如下所示:

some_object = some_namedtuple._asdict()
val = some_object.get(attr_name)
Run Code Online (Sandbox Code Playgroud)

但检索属性的更 Pythonic 方法是简单地使用内置的getattr函数,该函数也适用于任何其他 Python 对象:

val = getattr(some_namedtuple, attr_name)
Run Code Online (Sandbox Code Playgroud)


chr*_*ise 6

我偶然发现的另一个解决方案是

pandas_object.__getattribute__(attr_name)
Run Code Online (Sandbox Code Playgroud)

似乎比

pandas_object.__dict__[attr_name]
Run Code Online (Sandbox Code Playgroud)

不幸的是,与 .get 相比,此方法不允许设置默认值