本文介紹基於Python語言,針對一個文件夾下大量的Excel表格文件,對其中的每一個文件加以操作——將其中指定的若幹列的數據部分都向上移動一行,並將所有操作完畢的Excel表格文件中的數據加以合併,生成一個新的Excel文件的方法~ ...
本文介紹基於Python語言,針對一個文件夾下大量的Excel表格文件,對其中的每一個文件加以操作——將其中指定的若幹列的數據部分都向上移動一行,並將所有操作完畢的Excel表格文件中的數據加以合併,生成一個新的Excel文件的方法。
首先,我們明確一下本文的需求。在一個文件夾內,有大量的Excel表格文件(以.csv
格式文件為例),其中每一個文件都有著類似如下圖所示的數據特征;我們希望,對於下圖中紫色框內的列,其中的數據部分(每一列都有一個列名,這個列名不算數據部分)都向上提升一行(比如原本數據部分的第2
行變到第1
行,原本第3
行變到第2
行,以此類推)。
由上圖也可以看到,需要加以數據操作的列,有的在原本數據部分的第1
行就沒有數據,而有的在原本的數據部分中第1
行也有數據;對於後者,我們在數據向上提升一行之後,相當於原本第1
行的數據就被覆蓋掉了。此外,很顯然在每一個文件的操作結束後,加以處理的列的數據部分的最後一行肯定是沒有數據的,因此在合併全部操作後的文件之前,還希望將每一個操作後文件的最後一行刪除。
知道了需求,我們就可以開始代碼的撰寫;具體代碼如下。
# -*- coding: utf-8 -*-
"""
Created on Fri May 19 01:47:06 2023
@author: fkxxgis
"""
import os
import pandas as pd
original_path = "E:/01_Reflectivity/25_2022Data_New"
result_path = "E:/01_Reflectivity/99_Model/02_Extract_Data/26_Train_Model_New"
result_df = pd.DataFrame()
for file in os.listdir(original_path):
if file.endswith(".csv"):
df = pd.read_csv(os.path.join(original_path, file))
columns_move_index = list(range(8, 16)) + list(range(17, 36))
for columns_index in columns_move_index:
for i in range(len(df) - 1):
df.iat[i, columns_index] = df.iat[i + 1, columns_index]
if len(df):
df = df.drop(len(df) - 1)
# df = df.iloc[ : , 1 : ]
result_df = pd.concat([result_df, df])
result_df.to_csv(os.path.join(result_path, "Train_Model_0715_Main.csv"), index = False)
其中,original_path
表示存放有多個待處理的Excel表格文件的文件夾路徑,result_path
則是結果Excel表格文件的存放路徑。
首先,我們通過result_df = pd.DataFrame()
創建一個空的DataFrame,用於保存處理後的數據。接下來,遍歷原始文件夾中的所有文件,並找到文件夾內以.csv
結尾的文件;隨後,讀取這些.csv
文件,並將其保存到df
中。
其次,我們通過columns_move_index = list(range(8, 16)) + list(range(17, 36))
指定需要移動數據的列的索引範圍,並隨後遍歷需要移動數據的列。接下來的df.iat[i, columns_index] = df.iat[i + 1, columns_index]
表示將當前行的數據替換為下一行對應的數據。
接下來,我們通過if len(df):
判斷是否DataFrame不為空,如果是的話就刪除DataFrame中的最後一行數據;隨後,將處理後的DataFrame連接到result_df
中。
最後,我們通過result_df.to_csv()
函數,將最終處理後的DataFrame保存為一個新的Excel表格文件,從而完成我們的需求。
至此,大功告成。