重命名随时间变化的列名称

2024-10-04 09:20:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件要处理,但是列名和顺序会随着时间的推移而改变。 我想重命名列的名称,即使它们是文件中的一个更改,我也能使用它

例如:有时是

exp 1:

postcode brand
abde     exp1
enter code here

exp 2

PostCode brands
abdx     exp2

exp 3

brands postcode
abde     exp1

导出的输出

PostCode brand
abde     exp1

注意:我不能使用索引,因为顺序会随时间而变化


Tags: 文件名称here顺序时间code重命名postcode
3条回答

我将创建一个列映射器字典,您可以随时间添加到其中:

col_map = {
  "postcode": "PostCode",
  "brands": "brand",
}

col_order = ["PostCode", "brand"]

renamed_df = df.columns.map(lambda x: col_map.get(x, x)) # <- Renames the cols to the dict values
ouput = renamed_df.reindex(columns=col_order ) # <- reorders the cols based on the config list

注意col_map.get(x, x)如果是新的,则返回到提供的列,即“品牌”

相反,如果您希望它出错,以便能够轻松识别问题并更新col_map,则可以使用df.columns.map(col_map)

这个问题没有明确的答案,一切都取决于标题的可变性

让我们想象一下:顺序和复数是唯一的变化。您可以map为列名添加一个清理函数,并对列进行排序:

def clean_name(s):
    # make lowercase
    s = s.lower()
    # remove trailing 's'
    s = s.rstrip('s')
    return s

df.columns = df.columns.map(clean_name)
df = df.sort_index(axis=1)

输入示例:

  PostCode brands
0     abde   exp1

输出:

  brand postcode
0  exp1     abde

您可以按如下方式标准化数据帧的列名:

>>> df.rename(columns={c: "PostCode" if "postcode" in c.lower() else "Brand" for c in df.columns})

相关问题 更多 >