python - 动态更新 pandas 列名称以避免代码更改

标签 python pandas

有没有办法动态更新基于先前列名的列名?或者处理数据时列名称的最佳实践是什么?下面我解释一下这个问题:

在处理数据时,我经常需要创建根据前面的列计算得出的列,我设置的名称如下:

|STUDENT|GRADE|GRADE_AVG|GRADE_AVG_FORMATTED|GRADE_AVG_FORMATTED_FINAL

问题是,如果我需要在此数据流的中间进行更改[例如,假设我需要在取平均值之前缩放成绩],我将不得不重命名所有列名称是在这一点之后产生的。见下文:

|STUDENT|GRADE|**GRADE_SCALED**|GRADE_SCALED_AVG|GRADE_SCALED_AVG_FORMATTED|GRADE_SCALED_AVG_FORMATTED_FINAL

由于计算每一列的代码是基于先前的列名称,因此代码中更改名称的过程非常麻烦,特别是对于已生成大量代码的大型数据集。关于如何动态更新列名称有什么建议吗?或者最佳实践?

为了澄清这一点,示例的扩展:

我的代码如下所示:

df[GRADE_AVG] = df[GRADE].apply(something)
df[GRADE_AVG_FORMATTED] = df[GRADE_AVG].apply(something)
df[GRADE_AVG_FORMATTED_FINAL] = df[GRADE_AVG_FORMATTED].apply(something)
...
... more column names based on the previous one..
...
df[FINAL_SCORE] = df[GRADE_AVG_FORMATTED_FINAL_REVISED...etc]

然后...我需要在代码中将 GRADE_AVG 更改为 GRADE_SCALED_AVG。所以我将更改这些列名称。这是一个小例子,但是当有很多基于前一个的列名时,更改代码会变得困惑。

我所做的是更改代码中的所有列名称,如下所示(但这确实不切实际),因此我的问题是:

df[GRADE_SCALED_AVG] = df[GRADE].apply(something)
df[GRADE_SCALED_AVG_FORMATTED] = df[GRADE_SCALED_AVG].apply(something)
df[GRADE_SCALED_AVG_FORMATTED_FINAL] = df[GRADE_SCALED_AVG_FORMATTED].apply(something)
...
... more column names based on the previous one..
...
df[FINAL_SCORE] = df[GRADE_SCALED_AVG_FORMATTED_FINAL_REVISED...etc]

最佳答案

假设您的列是否以 GRADE 开头。你可以这样做。

df.columns = ['GRADE_SCALED_'+ '_'.join(x.split('_')[1:]) if x.startswith('GRADE') else x for x in df.columns]

# sample test case
>>> l = ['abc','GRADE_AVG','GRADE_AVG_TOTAL']
>>> ['GRADE_SCALED_'+ '_'.join(x.split('_')[1:]) if x.startswith('GRADE') else x for x in l]
['abc', 'GRADE_SCALED_AVG', 'GRADE_SCALED_AVG_TOTAL']

关于python - 动态更新 pandas 列名称以避免代码更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57698876/

相关文章:

python - lxml.etree : Start tag expected, '<' 未找到,第 1 行,第 1 列

python - 各种距离测量的困惑 : Normalized Cross Correlation, 归一化相关系数和巴塔查里亚系数

python - 在 python 中使用 shell=True 清理子进程的输入

python - 如何在不丢失索引的情况下转换 pandas 中的数据框?

python - 计算列中 bool 值从 True 变为 False 的次数

python - 赋值前引用的局部变量 'df'

python - 子类化模块以弃用模块级变量/常量?

python-3.x - 为 Flair 模型训练准备数据框

python - 使用 sort_values + head() 时如何包含匹配值

python - Spark DataFrame 方法 `toPandas` 实际上在做什么?