如何更新 Python 文件中所有工作表的列名?
How do I update column names for all sheets within a file in Python?
我正在尝试了解如何添加到我当前的脚本中,以便我能够在 sheet 级别进行更改。我想更新列的名称并将它们映射到新名称。例如,如果列名为 'locationname',我想将文件中所有 sheet 的列名称更新为 'company name'
到目前为止,我的代码已设法从文件中删除特定的 sheet-
import pandas as pd
from openpyxl import load_workbook
for file in os.listdir("C:/Users/yam/Desktop/hhh/python/sterls"):
if file.startswith("TVC"):
wb = load_workbook(file)
if 'Opt-Ins' in wb.sheetnames:
wb.remove(wb['Opt-Ins'])
wb.save(file)
我想将以下内容应用到我上面脚本的文件中的所有 sheets-
column_name_update_map = {'Company Name': 'LocationName', 'Address': 'StreetAddress','City':'City','State':'State','Zip':'Zip','Phone Number':'GeneralPhone','Email':'GeneralEmail'}
df = df.rename(columns=column_name_update_map)
如何在我的循环中实现它并保存到文件?
加载工作簿后,您可以使用类似下面的方法从工作簿中获取工作表并在循环中相应地更新它
from openpyxl.utils.dataframe import dataframe_to_rows
sheet_names = wb.get_sheet_names()
for item in sheet_names:
current_sheet = wb.get_sheet_by_name(item)
data = current_sheet.values
columns = next(data)[0:] // gives you a first row as header
df = pd.DataFrame(data, columns=columns)
df.rename(columns=column_name_update_map)
for r in dataframe_to_rows(df, index=True, header=True):
ws.append(r)
然后保存。希望对你有帮助
Alternatively you can just get the first row if sheet and update it using this line columns = next(data)[0:]
遍历每个 header 单元格,并尝试为每个单元格分配一个新值,从 column_name_update_map
中提取值。如果当前 header 名称 (header.value
) 不在 column_name_update_map
中,将引发一个 KeyError
,您可以安全地忽略它。在这种情况下,该值不会更新。
for file in os.listdir("C:/Users/yam/Desktop/hhh/python/sterls"):
if file.startswith("TVC"):
wb = load_workbook(file)
if 'Opt-Ins' in wb.sheetnames:
wb.remove(wb['Opt-Ins'])
for ws in wb:
for header in next(ws.rows):
try:
header.value = column_name_update_map[header.value]
except KeyError:
pass
wb.save(file + " (updated headers).xlsx")
我正在尝试了解如何添加到我当前的脚本中,以便我能够在 sheet 级别进行更改。我想更新列的名称并将它们映射到新名称。例如,如果列名为 'locationname',我想将文件中所有 sheet 的列名称更新为 'company name'
到目前为止,我的代码已设法从文件中删除特定的 sheet-
import pandas as pd
from openpyxl import load_workbook
for file in os.listdir("C:/Users/yam/Desktop/hhh/python/sterls"):
if file.startswith("TVC"):
wb = load_workbook(file)
if 'Opt-Ins' in wb.sheetnames:
wb.remove(wb['Opt-Ins'])
wb.save(file)
我想将以下内容应用到我上面脚本的文件中的所有 sheets-
column_name_update_map = {'Company Name': 'LocationName', 'Address': 'StreetAddress','City':'City','State':'State','Zip':'Zip','Phone Number':'GeneralPhone','Email':'GeneralEmail'}
df = df.rename(columns=column_name_update_map)
如何在我的循环中实现它并保存到文件?
加载工作簿后,您可以使用类似下面的方法从工作簿中获取工作表并在循环中相应地更新它
from openpyxl.utils.dataframe import dataframe_to_rows
sheet_names = wb.get_sheet_names()
for item in sheet_names:
current_sheet = wb.get_sheet_by_name(item)
data = current_sheet.values
columns = next(data)[0:] // gives you a first row as header
df = pd.DataFrame(data, columns=columns)
df.rename(columns=column_name_update_map)
for r in dataframe_to_rows(df, index=True, header=True):
ws.append(r)
然后保存。希望对你有帮助
Alternatively you can just get the first row if sheet and update it using this line
columns = next(data)[0:]
遍历每个 header 单元格,并尝试为每个单元格分配一个新值,从 column_name_update_map
中提取值。如果当前 header 名称 (header.value
) 不在 column_name_update_map
中,将引发一个 KeyError
,您可以安全地忽略它。在这种情况下,该值不会更新。
for file in os.listdir("C:/Users/yam/Desktop/hhh/python/sterls"):
if file.startswith("TVC"):
wb = load_workbook(file)
if 'Opt-Ins' in wb.sheetnames:
wb.remove(wb['Opt-Ins'])
for ws in wb:
for header in next(ws.rows):
try:
header.value = column_name_update_map[header.value]
except KeyError:
pass
wb.save(file + " (updated headers).xlsx")