首页 > 解决方案 > 如何在 Python 中动态访问对象的属性?

问题描述

我有一个看起来像这样的数据

data = [(u'Del', datetime.datetime(2019, 11, 1, 0, 0), 59L), (u'Bom', datetime.datetime(2019, 11, 1, 0, 0), 449L), (u'Del', datetime.datetime(2019, 12, 1, 0, 0), 0L), (u'Bom', datetime.datetime(2019, 12, 1, 0, 0), 45L)]

pandas用来做一些数据争论。现在我需要从某些格式的数据中获取日期列表,例如,hour等。所以要从 中的数据中提取日期,这就是我所做的monthyearmonth

import pandas as pd
import datetime

df = pd.DataFrame(data)
dates = df[1].dt.month.values.tolist()

所以我得到了几个月的清单。但在方法df[1].dt.year.values.tolist()中,我想动态分配粒度,即它可以是dt.monthdt.year基于变量值。

假设我有一个名为的变量granularity_val

所以如果granularity_val = 'year',我应该做

dates = df[1].dt.year.values.tolist()

同样如果granularity_val = 'month',我应该做

dates = df[1].dt.month.values.tolist()

所以我试着做这样的事情

granularity_val = 'year'
dates = df[1].dt.granularity_val.values.tolist()

但它会引发如下错误

AttributeError: 'DatetimeProperties' object has no attribute 'granularity_val'

我知道它试图将变量dt视为pandas. 那么如何让 python 理解它不需要将其granularity_val视为属性而是变量值呢?

标签: pythonpandasobject

解决方案


您可以使用getattr通过字符串引用任何属性

getattr(df[1].dt, granularity_val).values.tolist()

推荐阅读