首页 > 解决方案 > 有没有办法在循环中通过更改名称来编辑变量?

问题描述

我需要从数据库中编辑 200 多个 Excel 文件,不幸的是,数据库以一种奇怪的方式提供数据,这意味着我需要删除前 2 行,并且需要重命名 20 个变量名。其中 19 个保持不变,但 excel 表中的 1 个变量名称(始终位于同一位置)正在发生变化。这个变化的变量需要命名为 FY-0,名称更改为 FY-1... 已经包含在内。

import os
import pandas as pd
in_path = 'ESG_untransfored'
out_path = 'ESG_transformed'
if not os.path.exists(out_path):
os.mkdir(out_path)

for filename in os.listdir(in_path):
    if filename.endswith('.xlsx'):
        df = pd.read_excel(os.path.join(in_path, filename))
        df = df.iloc[2:]
        duf=duf.rename(columns = {'Unnamed: 29':'FY-1'})
        duf=duf.rename(columns = {'Unnamed: 30':'FY-2'})
        duf=duf.rename(columns = {'Unnamed: 31':'FY-3'})
        duf=duf.rename(columns = {'Unnamed: 32':'FY-4'})
        duf=duf.rename(columns = {'Unnamed: 33':'FY-5'})
        duf=duf.rename(columns = {'Unnamed: 34':'FY-6'})
        duf=duf.rename(columns = {'Unnamed: 35':'FY-7'})
        duf=duf.rename(columns = {'Unnamed: 36':'FY-8'})
        duf=duf.rename(columns = {'Unnamed: 37':'FY-9'})
        duf=duf.rename(columns = {'Unnamed: 38':'FY-10'})
        duf=duf.rename(columns = {'Unnamed: 39':'FY-11'})
        duf=duf.rename(columns = {'Unnamed: 40':'FY-12'})
        duf=duf.rename(columns = {'Unnamed: 41':'FY-13'})
        duf=duf.rename(columns = {'Unnamed: 42':'FY-14'})
        duf=duf.rename(columns = {'Unnamed: 43':'FY-15'})
        duf=duf.rename(columns = {'Unnamed: 44':'FY-16'})
        duf=duf.rename(columns = {'Unnamed: 45':'FY-17'})
        duf=duf.rename(columns = {'Unnamed: 46':'FY-18'})
        duf=duf.rename(columns = {'Unnamed: 47':'FY-19'})
        duf=duf.rename(columns = {'Unnamed: 48':'FY-20'})
        df.to_excel(os.path.join(out_path, filename),      index=False)

标签: pythonpandas

解决方案


假设我正确理解了您的问题(duf应该是这样df),您可以执行以下操作:

df = pd.read_excel(os.path.join(in_path, filename))
df = df.iloc[2:]
cols = list(df.columns)
cols[0] = "FY-0"
df.columns = cols 

这将始终将第一列的名称更改为"FY-0". 不太优雅,但应该做的伎俩。

(您必须这样做的原因list(df.columns)是数据框的列属性是不可变的,但列表不是)。


推荐阅读