python - 如何在 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
等。所以要从 中的数据中提取日期,这就是我所做的month
year
month
import pandas as pd
import datetime
df = pd.DataFrame(data)
dates = df[1].dt.month.values.tolist()
所以我得到了几个月的清单。但在方法df[1].dt.year.values.tolist()
中,我想动态分配粒度,即它可以是dt.month
或dt.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
视为属性而是变量值呢?
解决方案
您可以使用getattr
通过字符串引用任何属性
getattr(df[1].dt, granularity_val).values.tolist()
推荐阅读
- swift - 只有在安装应用时才能看到 App Clips 横幅
- swift - 我是否必须锁定从 AVCaptureVideoDataOutput 生成的 CVPixelBuffer
- environment-variables - OpenUI5 应用程序中的环境变量
- wordpress - 为什么我会收到此代码的致命错误消息
- unity3d - Unity使用着色器进行水效果,但我需要着色器三角形的法线和位置而不是网格
- javascript - 在 javascript 类中,如何让一个方法从另一个方法继承?
- ios - iPhone 11 上的 SafeAreaView 实施
- mysql - 不使用视图左连接
- algorithm - 当计算机速度加倍时计算 O(n)
- javascript - 谷歌日历 API 条件