最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)對大量表格文件數(shù)據(jù)處理的方法詳解

 更新時間:2023年05月23日 15:58:51   作者:瘋狂學(xué)習(xí)GIS  
這篇文章主要為大家介紹了如何基于Python語言實現(xiàn)對大量表格文件加以數(shù)據(jù)截取、逐行求差、跨文件合并等處理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本文介紹基于Python語言,針對一個文件夾下大量的Excel表格文件,基于其中每一個文件,首先依據(jù)某一列數(shù)據(jù)的特征截取我們需要的數(shù)據(jù),隨后對截取出來的數(shù)據(jù)逐行求差,并基于其他多個文件夾中同樣大量的Excel表格文件,進(jìn)行數(shù)據(jù)跨文件合并的具體方法。

首先,我們來明確一下本文的具體需求。現(xiàn)有一個文件夾,其中有大量的Excel表格文件(在本文中我們就以.csv格式的文件為例),且每一個文件名稱都表示該文件對應(yīng)的數(shù)據(jù)源點的ID;如下圖所示。

其中,每一個Excel表格文件都有著如下圖所示的數(shù)據(jù)格式;其中的第1列,是表示天數(shù)的時間數(shù)據(jù),每一行數(shù)據(jù)之間的時間跨度是8天。

我們希望實現(xiàn)的是,首先對于這個文件夾中的每一個文件,都截取出其中天數(shù)在2022001(也就是2022年第1天)及之后的部分;隨后,對截取出來的數(shù)據(jù)的各列(除了第1列,因為第1列是表示時間的數(shù)據(jù))加以逐行求差——例如,用2022009的數(shù)據(jù)減去2022001的數(shù)據(jù),隨后用2022017的數(shù)據(jù)減去2022009的數(shù)據(jù),并將差值作為新的幾列放在原有的幾列后面;還有,我們還希望從當(dāng)前文件的文件名、以及第1列的天數(shù)中,提取出一些關(guān)鍵信息,作為新的列放在后面(我這里是希望生產(chǎn)一個深度神經(jīng)網(wǎng)絡(luò)回歸的訓(xùn)練數(shù)據(jù),所以就需要組合各類的數(shù)據(jù))。此外,我們還有2個文件夾,其中有著同樣大量、同樣文件命名規(guī)則、同樣數(shù)據(jù)格式的數(shù)據(jù),我們希望將這2個文件夾中與當(dāng)前文件夾中每一個同名的文件中的同一天的數(shù)據(jù)合并。

了解了需求,我們就可以開始代碼的書寫。本文用到的代碼如下所示。

# -*- coding: utf-8 -*-
"""
Created on Thu May 18 11:36:41 2023

@author: fkxxgis
"""

import os
import numpy as np
import pandas as pd

original_path = "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/17_HANTS"
era5_path = "E:/01_Reflectivity/99_Model_Training/00_Data/03_Meteorological_Data/02_AllERA5"
history_path = "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/18_AllYearAverage_2"
output_path = "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/19_2022Data"

era5_files = os.listdir(era5_path)
history_files = os.listdir(history_path)

for file in os.listdir(original_path):
    file_path = os.path.join(original_path, file)
    
    if file.endswith(".csv") and os.path.isfile(file_path):
        point_id = file[4 : -4]
        
        df = pd.read_csv(file_path)
        filter_df = df[df["DOY"] >= 2022001]
        filter_df = filter_df.reset_index(drop = True)
        filter_df["blue_dif"] = filter_df["blue"].diff()
        filter_df["green_dif"] = filter_df["green"].diff()
        filter_df["red_dif"] = filter_df["red"].diff()
        filter_df["inf_dif"] = filter_df["inf"].diff()
        filter_df["si1_dif"] = filter_df["si1"].diff()
        filter_df["si2_dif"] = filter_df["si2"].diff()
        filter_df["NDVI_dif"] = filter_df["NDVI"].diff()
        filter_df["PointType"] = file[4 : 7]
        filter_df["days"] = filter_df["DOY"] % 1000
        
        for era5_file in era5_files:
            if point_id in era5_file:
                era5_df = pd.read_csv(os.path.join(era5_path, era5_file))
                
                rows_num = filter_df.shape[0]
                for i in range(rows_num):
                    day = filter_df.iloc[i, 0]
                    row_need_index = era5_df.index[era5_df.iloc[ : , 1] == day]
                    row_need = row_need_index[0]
                    sola_data_all = era5_df.iloc[row_need - 2 : row_need, 2]
                    temp_data_all = era5_df.iloc[row_need - 6 : row_need - 2, 3]
                    prec_data_all = era5_df.iloc[row_need - 5 : row_need - 1, 4]
                    soil_data_all = era5_df.iloc[row_need - 6 : row_need - 2, 5 : 7 + 1]
                    sola_data = np.sum(sola_data_all.values)
                    temp_data = np.sum(temp_data_all.values)
                    prec_data = np.sum(prec_data_all.values)
                    soil_data = np.sum(soil_data_all.values)
                    filter_df.loc[i, "sola"] = sola_data
                    filter_df.loc[i, "temp"] = temp_data
                    filter_df.loc[i, "prec"] = prec_data
                    filter_df.loc[i, "soil"] = soil_data
                break
            
        for history_file in history_files:
            if point_id in history_file:
                history_df = pd.read_csv(os.path.join(history_path, history_file)).iloc[ : , 1 : ]
                history_df.columns = ["blue_h", "green_h", "red_h", "inf_h", "si1_h", "si2_h", "ndvi_h"]
                break
        
        filter_df_new = pd.concat([filter_df, history_df], axis = 1)
                
        output_file = os.path.join(output_path, file)
        filter_df_new.to_csv(output_file, index = False)

代碼中首先定義了幾個文件夾路徑,分別是原始數(shù)據(jù)文件夾(也就是本文開頭第1張圖所示的文件夾)、ERA5氣象數(shù)據(jù)文件夾、歷史數(shù)據(jù)文件夾和輸出文件夾。然后,通過 os.listdir() 函數(shù)獲取了ERA5氣象數(shù)據(jù)文件夾和歷史數(shù)據(jù)文件夾中的所有文件名,并在后續(xù)的循環(huán)中使用。

接下來是一個 for 循環(huán),遍歷了原始數(shù)據(jù)文件夾中的所有.csv文件,如果文件名以 .csv 結(jié)尾并且是一個合法的文件,則讀取該文件。然后,根據(jù)文件名提取了點ID,并使用Pandas中的 read_csv() 函數(shù)讀取了該文件的數(shù)據(jù)。接著,使用Pandas中的 loc[] 函數(shù)對數(shù)據(jù)進(jìn)行了處理,包括篩選出DOY大于等于 2022001 的行,將其重置索引,并計算了反射率數(shù)據(jù)的差值。然后,將一些元數(shù)據(jù)添加到篩選后的數(shù)據(jù)中,包括點類型和天數(shù)。

接下來是兩個 for 循環(huán),分別用于處理ERA5氣象數(shù)據(jù)和歷史數(shù)據(jù)。在處理ERA5氣象數(shù)據(jù)時,首先找到與當(dāng)前點ID匹配的ERA5氣象數(shù)據(jù)文件,并使用Pandas中的 read_csv() 函數(shù)讀取了該文件的數(shù)據(jù)。然后,使用 iloc[] 函數(shù)根據(jù)當(dāng)前日期找到了ERA5氣象數(shù)據(jù)中對應(yīng)的行,并從該行及其前兩行中提取了太陽輻射、溫度、降水和土壤濕度數(shù)據(jù)。最后,將這些數(shù)據(jù)添加到篩選后的數(shù)據(jù)中。

在處理歷史數(shù)據(jù)時,首先找到與當(dāng)前點ID匹配的歷史數(shù)據(jù)文件,并使用Pandas中的 read_csv() 函數(shù)讀取了該文件的數(shù)據(jù)。然后,使用 iloc[] 函數(shù)刪除了第一列,并將剩余列重命名為blue_h、green_hred_h、inf_hsi1_h、si2_hndvi_h。最后,使用Pandas中的 concat() 函數(shù)將篩選后的數(shù)據(jù)和歷史數(shù)據(jù)合并成一個新的DataFrame

最后,使用Pandas中的 to_csv() 函數(shù)將新的DataFrame保存到輸出文件夾中。

運行上述代碼,我們即可得到無數(shù)個組合后的Excel表格文件,其中每一個文件的列都如下圖所示,已經(jīng)是我們合并了各類信息之后的了。

這樣,就完成了我們神經(jīng)網(wǎng)絡(luò)訓(xùn)練數(shù)據(jù)集的生產(chǎn)過程。

至此,大功告成。

到此這篇關(guān)于Python實現(xiàn)對大量表格文件數(shù)據(jù)處理的方法詳解的文章就介紹到這了,更多相關(guān)Python表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

井陉县| 河北区| 元朗区| 荆门市| 拜城县| 武城县| 江城| 津南区| 清水县| 永靖县| 子长县| 缙云县| 平果县| 兴海县| 基隆市| 甘肃省| 丰县| 来凤县| 砚山县| 乌兰浩特市| 临漳县| 磐安县| 依安县| 鲁山县| 定襄县| 迭部县| 虞城县| 黔东| 三亚市| 肇源县| 郯城县| 大庆市| 临夏市| 罗江县| 漯河市| 前郭尔| 凤冈县| 漳州市| 松原市| 城口县| 利辛县|