Python Pandas动态列赋值如何简化text_features定义
实现代码
直接通过Python内置的getattr()动态读取实例方法即可,不需要手动维护方法和列名的映射关系:
r = ReadabilityMetrics() # 仅需维护特征名的字符串列表,和生成的列名、类方法名完全对应 text_features = [ 'sentence_count', 'word_count', 'syllable_count', 'unique_words', 'reading_time', 'speaking_time', 'flesch_reading_ease', 'flesch_kincaid_grade', 'char_count' ] df = df.assign(**{ feat: df['description'].apply(getattr(r, feat)) for feat in text_features })
补充说明
getattr(obj, 属性名)是Python内置函数,可以按字符串形式的属性名,动态获取对象的属性或方法,完全适配你列名和方法名一致的场景,后续新增/删除特征只需要修改text_features列表即可,符合DRY原则。- 如果你的
ReadabilityMetrics类的方法支持直接传入整个字符串Series做批量计算,可以去掉apply进一步提升运行性能:
df = df.assign(**{ feat: getattr(r, feat)(df['description']) for feat in text_features })
内容的提问来源于stack exchange,提问作者mmz
相关产品推荐
相关产品推荐

