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

使用Python對Excel數(shù)據(jù)讀取與保存的全面指南

 更新時間:2025年12月17日 08:57:50   作者:Dfreedom.  
在數(shù)據(jù)分析與處理工作中,Excel文件是最常見的數(shù)據(jù)源之一,本文將詳細介紹如何使用Python的Pandas庫進行Excel文件的讀寫操作,涵蓋常用函數(shù)、典型應用場景、實例演示及常見問題解決方案,需要的朋友可以參考下

1. Pandas讀寫Excel核心函數(shù)解析

Pandas提供了完善的Excel文件支持,可以處理.xlsx、.xls等多種格式的電子表格文件。

1.1 數(shù)據(jù)讀取函數(shù):read_excel()

pd.read_excel()函數(shù)是Pandas中用于讀取Excel數(shù)據(jù)的核心方法,支持豐富的參數(shù)配置:

def read_single_sheet(file_path: str | Path, sheet_name: str | int = 0,
                      usecols: Optional[List] = None, skiprows: int = 0,
                      nrows: Optional[int] = None) -> pd.DataFrame:
    """
    讀取單個Excel文件的指定工作表
    """

關鍵參數(shù)詳解

  • io:文件路徑,支持字符串、路徑對象或文件流
  • sheet_name:工作表指定,可以是名稱(str)、索引(int)或列表(多工作表)
  • header:指定作為列名的行號,默認為0(第一行)
  • usecols:選擇特定列讀取,提高讀取效率
  • nrows:限制讀取行數(shù),適合探索大型文件
  • dtype:指定列數(shù)據(jù)類型,優(yōu)化內存使用

1.2 數(shù)據(jù)寫入函數(shù):to_excel()

將DataFrame寫入Excel文件同樣簡單直觀:

def save_to_excel(data: Union[pd.DataFrame, Dict[str, pd.DataFrame]],
                  output_path: str | Path, index: bool = False, **kwargs) -> bool:
    """
    將數(shù)據(jù)保存到Excel文件,支持單個或多個工作表
    """

2. 數(shù)據(jù)讀取與保存的常見場景

2.1 單工作表讀取

最基本的應用場景,讀取指定Excel文件的特定工作表:

# 讀取單個工作表
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

2.2 工作表級別精細讀取

2.2.1 讀取單個工作表的基本信息

在實際數(shù)據(jù)處理中,我們經常需要先了解工作表的結構再決定如何讀?。?/p>

def get_excel_info(file_path: str | Path) -> Dict:
    """
    獲取Excel文件的基本信息,包括工作表數(shù)量、名稱、數(shù)據(jù)范圍等
    """
    try:
        wb = load_workbook(file_path, read_only=True)
        info = {
            'file_name': os.path.basename(file_path),
            'sheet_count': len(wb.sheetnames),
            'sheet_names': wb.sheetnames,
            'active_sheet': wb.active.title  # 獲取默認打開時選中的工作表
        }
        
        # 獲取每個工作表的詳細數(shù)據(jù)范圍
        sheets_info = {}
        for sheet_name in wb.sheetnames:
            ws = wb[sheet_name]
            sheets_info[sheet_name] = {
                'max_row': ws.max_row,        # 工作表的最大數(shù)據(jù)行數(shù)
                'max_column': ws.max_column   # 工作表的最大數(shù)據(jù)列數(shù)
            }
        
        info['sheets_info'] = sheets_info
        wb.close()
        return info
    except Exception as e:
        print(f"獲取文件信息失敗: {e}")
        return {}

2.2.2 多工作表處理

當Excel文件包含多個工作表時,可以一次性讀取所有工作表:

# 讀取所有工作表,返回字典{sheet_name: DataFrame}
all_sheets = pd.read_excel('data.xlsx', sheet_name=None)

# 或者讀取特定多個工作表
selected_sheets = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])

2.2.3 讀取特定工作表的特定區(qū)域

對于大型工作表,可以只讀取需要的區(qū)域:

# 只讀取A到C列,跳過前兩行標題,只讀取100行數(shù)據(jù)
df = pd.read_excel('large_file.xlsx', 
                   sheet_name='Sheet1',
                   usecols='A:C',
                   skiprows=2,
                   nrows=100)

2.3 批量處理:讀取文件夾中的多個Excel文件

在實際項目中,經常需要處理整個文件夾中的多個Excel文件。思路如下:

2.4 數(shù)據(jù)導出與格式控制

將處理結果保存為Excel文件時,可以精細控制輸出格式:

# 保存單個DataFrame
df.to_excel('output.xlsx', index=False, sheet_name='處理結果')

# 保存多個DataFrame到同一文件的不同工作表
with pd.ExcelWriter('multi_sheet_output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='匯總', index=False)
    df2.to_excel(writer, sheet_name='詳情', index=False)

3. 實戰(zhàn)演示:完整Excel數(shù)據(jù)處理流程

以下是一個完整的實際應用示例,展示從數(shù)據(jù)讀取、處理到保存的全過程:

import pandas as pd
import glob
from pathlib import Path
from typing import List, Union, Dict, Optional
from openpyxl import load_workbook, Workbook
from file_io import FileIO


class ExcelIO:
    """
    Excel文件處理工具類
    封裝常見的Excel數(shù)據(jù)讀取和保存操作
    """

    def __init__(self):
        pass
    @staticmethod
    def read_single_sheet(file_path: str | Path, sheet_name: str | int = 0,
                          usecols: Optional[List] = None, skiprows: int = 0,
                          nrows: Optional[int] = None) -> pd.DataFrame:
        """
        讀取單個Excel文件的指定工作表[1,4](@ref)

        Args:
            file_path: Excel文件路徑
            sheet_name: 工作表名稱或索引,默認為第一個工作表
            usecols: 指定讀取的列
            skiprows: 跳過的行數(shù)
            nrows: 讀取的行數(shù)限制

        Returns:
            pd.DataFrame: 讀取的數(shù)據(jù)框
        """
        try:
            df = pd.read_excel(
                file_path,
                sheet_name=sheet_name,
                usecols=usecols,
                skiprows=skiprows,
                nrows=nrows
            )
            print(f"成功讀取文件: {file_path}, 工作表: {sheet_name}")
            return df
        except Exception as e:
            print(f"讀取文件失敗: {e}")
            return pd.DataFrame()
    @staticmethod
    def read_all_sheets(file_path: str | Path) -> Dict[str, pd.DataFrame]:
        """
        讀取單個Excel文件的所有工作表[1](@ref)

        Args:
            file_path: Excel文件路徑

        Returns:
            Dict[str, pd.DataFrame]: 工作表名到數(shù)據(jù)框的映射字典
        """
        try:
            all_sheets = pd.read_excel(file_path, sheet_name=None)
            print(f"成功讀取文件的所有工作表: {file_path}, 共{len(all_sheets)}個工作表")
            return all_sheets
        except Exception as e:
            print(f"讀取所有工作表失敗: {e}")
            return {}
    @staticmethod
    def save_to_excel(data: Union[pd.DataFrame, Dict[str, pd.DataFrame]],
                      output_path: str | Path, index: bool = False, **kwargs) -> bool:
        """
        將數(shù)據(jù)保存到Excel文件[1,4](@ref),可以保存一個sheet的數(shù)據(jù)或者多個sheet的數(shù)據(jù)

        Args:
            data: 要保存的數(shù)據(jù),可以是單個DataFrame或工作表字典
            output_path: 輸出文件路徑
            index: 是否保存索引
            **kwargs: 其他pandas參數(shù)

        Returns:
            bool: 保存是否成功
        """
        try:
            if isinstance(data, pd.DataFrame):
                # 保存單個數(shù)據(jù)框
                data.to_excel(output_path, index=index, **kwargs)
                print(f"成功保存單個數(shù)據(jù)框到: {output_path}")

            elif isinstance(data, dict):
                # 保存多個工作表
                with pd.ExcelWriter(output_path) as writer:
                    for sheet_name, df in data.items():
                        # 確保工作表名稱有效
                        valid_sheet_name = str(sheet_name)[:31]  # Excel工作表名最大31字符
                        df.to_excel(writer, sheet_name=valid_sheet_name, index=index, **kwargs)
                print(f"成功保存{len(data)}個工作表到: {output_path}")

            return True

        except Exception as e:
            print(f"保存文件失敗: {e}")
            return False

    @staticmethod
    def get_excel_info(file_path: str | Path) -> Dict:
        """
        獲取Excel文件的基本信息

        Args:
            file_path: Excel文件路徑,可以是字符串或Path對象

        Returns:
            Dict: 包含Excel文件信息的字典
        """

        try:
            # 確保文件路徑為Path對象(兼容str格式)
            file_path = Path(file_path)
            # 以只讀模式加載Excel工作簿(提高大文件讀取效率)
            wb = load_workbook(file_path, read_only=True)

            # 構建信息字典,包含文件基本屬性[7](@ref)
            info = {
                'file_name': file_path.name,  # 提取文件名(不含路徑)
                'sheet_count': len(wb.sheetnames),  # 工作表總數(shù)[7](@ref)
                'sheet_names': wb.sheetnames,  # 所有工作表名稱列表[7](@ref)
                'active_sheet': wb.active.title  # 默認激活的工作表名稱[6](@ref)
            }

            # 遍歷每個工作表,獲取詳細信息[7](@ref)
            sheets_info = {}
            for sheet_name in wb.sheetnames:
                ws = wb[sheet_name]
                sheets_info[sheet_name] = {
                    'max_row': ws.max_row,  # 工作表的最大數(shù)據(jù)行數(shù)(從1開始)
                    'max_column': ws.max_column  # 工作表的最大數(shù)據(jù)列數(shù)(從1開始)
                }

            # 將各工作表詳細信息添加到返回字典
            info['sheets_info'] = sheets_info
            wb.close()  # 關閉工作簿釋放資源

            return info

        except Exception as e:
            print(f"獲取文件信息失敗: {e}")
            return {}  # 發(fā)生異常時返回空字典


# 使用示例
if __name__ == "__main__":
    # 創(chuàng)建處理器實例
    excel_io = ExcelIO()
    source_folder = Path(r"F:\test")
    excel_name = "data.xlsx"
    # 讀取單個文件,單個工作表
    df_single = excel_io .read_single_sheet(source_folder / excel_name , "Sheet1")
    print(df_single)
    array = df_single.to_numpy()# 轉換為NumPy數(shù)組
    filtered_array = array[1,:] #通過切片讀取特定區(qū)域的數(shù)據(jù)
    print( filtered_array)
    # 讀取單個文件,所有工作表
    all_sheets = excel_io .read_all_sheets(source_folder / excel_name )
    print(all_sheets)
    print(all_sheets["Sheet1"])

    # 獲取文件信息
    file_info = excel_io.get_excel_info(source_folder / excel_name)
    print(f"文件信息: {file_info}")

    #保存數(shù)據(jù)到Excel
    target_folder = Path(r"F:\target")
    new_name = "new.xlsx"
    excel_io.save_to_excel(df_single, target_folder/new_name)

    #讀取目標文件夾所有數(shù)據(jù),并保存
    file_io = FileIO(source_folder, target_folder )
    file_paths = file_io.list_file_paths(True) #遍歷所有文件,包括子文件夾里的
    excel_paths = file_io.filter_by_strings(file_paths ,[".xlsx"],True)#獲取Excel文件
    for excel_path in excel_paths:
        #數(shù)據(jù)讀取
        df = excel_io.read_single_sheet(excel_path,"Sheet1")

        ##數(shù)據(jù)處理

        #數(shù)據(jù)保存
        save_excel_name = Path(excel_path).name #可以通過修改名稱進行重命名
        excel_io.save_to_excel(df, target_folder / save_excel_name) #保存至excel

4. 常見問題與解決方案

4.1 編碼問題導致讀取失敗

問題:讀取時出現(xiàn)UnicodeDecodeError等編碼錯誤

解決方案

# 指定編碼格式讀取
df = pd.read_excel('file.xlsx', encoding='utf-8')  # 或gbk、gb2312等

# 如仍失敗,可先以二進制方式讀取再處理
with open('problem_file.xlsx', 'rb') as f:
    df = pd.read_excel(f)

4.2 大型文件內存不足

問題:讀取大文件時內存占用過高

解決方案

# 分塊讀取
chunk_size = 10000
chunks = pd.read_excel('large_file.xlsx', chunksize=chunk_size)

for i, chunk in enumerate(chunks):
    process_chunk(chunk)  # 逐塊處理
    if i >= 10:  # 限制處理塊數(shù),避免無限循環(huán)
        break

# 或者只讀取必要列
df = pd.read_excel('large_file.xlsx', usecols=['必要列1', '必要列2'])

4.3 數(shù)據(jù)類型自動識別錯誤

問題:數(shù)值被識別為文本,日期格式錯誤等

解決方案

# 明確指定列數(shù)據(jù)類型
df = pd.read_excel('file.xlsx', 
                   dtype={'電話': str, '數(shù)量': int},  # 明確指定類型
                   parse_dates=['日期列'])  # 明確解析日期列

4.4 批量處理中的錯誤處理

問題:批量處理多個文件時,單個文件錯誤導致整個任務失敗

解決方案

def safe_batch_process(folder_path):
    """帶錯誤處理的批量處理"""
    excel_files = glob.glob(os.path.join(folder_path, "*.xlsx"))
    success_count = 0
    error_files = []
    
    for file_path in excel_files:
        try:
            # 嘗試讀取和處理文件
            df = pd.read_excel(file_path)
            # ...處理邏輯...
            success_count += 1
            print(f"成功處理: {os.path.basename(file_path)}")
            
        except Exception as e:
            error_files.append((os.path.basename(file_path), str(e)))
            print(f"處理失敗: {os.path.basename(file_path)}, 錯誤: {e}")
            continue  # 繼續(xù)處理下一個文件
    
    print(f"處理完成: 成功 {success_count} 個, 失敗 {len(error_files)} 個")
    if error_files:
        print("失敗文件列表:")
        for file_name, error in error_files:
            print(f"  {file_name}: {error}")
    
    return success_count, error_files

4.5 保存時的格式丟失

問題:保存后數(shù)字格式、日期格式等丟失

解決方案

# 使用ExcelWriter進行精細控制
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name='數(shù)據(jù)', index=False)
    
    # 獲取工作表對象進行格式設置
    worksheet = writer.sheets['數(shù)據(jù)']
    
    # 設置數(shù)字格式
    for column in worksheet.columns:
        column_name = column[0].value
        if column_name in ['金額', '價格']:
            for cell in column[1:]:  # 跳過標題行
                cell.number_format = '#,##0.00'

以上就是使用Python對Excel數(shù)據(jù)讀取與保存的全面指南的詳細內容,更多關于Python Excel數(shù)據(jù)讀取與保存的資料請關注腳本之家其它相關文章!

相關文章

  • Python編程快速上手的15個場景的示例代碼

    Python編程快速上手的15個場景的示例代碼

    本文為初學者提供15個簡單的Python示例代碼,涵蓋了基本語法、數(shù)據(jù)結構、文件操作、面向對象編程、異常處理和網絡請求等內容,幫助快速入門Python編程
    2025-11-11
  • Python中的functools partial詳解

    Python中的functools partial詳解

    這篇文章主要介紹了Python中functools partial詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • 淺談python中的@以及@在tensorflow中的作用說明

    淺談python中的@以及@在tensorflow中的作用說明

    這篇文章主要介紹了淺談python中的@以及@在tensorflow中的作用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python錯誤NameError:name?'X'?is?not?defined的解決方法

    Python錯誤NameError:name?'X'?is?not?defined的解決方法

    這篇文章主要給大家介紹了關于Python錯誤NameError:name?‘X‘?is?not?defined的解決方法,這是最近工作中遇到的一個問題,文中通過實例代碼將解決的方法介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Pyenv uninstall刪除不需要的Python版本的詳細操作

    Pyenv uninstall刪除不需要的Python版本的詳細操作

    文章介紹了如何使用pyenv和Miniconda來管理Python環(huán)境,特別是在清理不再需要的Python版本和環(huán)境時的實戰(zhàn)技巧,強調了pyenv作為Python版本管理器的優(yōu)勢,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Python 將字符串轉換為列表的7種方法匯總

    Python 將字符串轉換為列表的7種方法匯總

    這篇文章主要介紹了Python 將字符串轉換為列表的7種方法匯總,在本文中,我們將嘗試將給定的字符串轉換為列表,其中根據(jù)用戶的選擇,遇到空格或任何其他特殊字符,為此,我們在string中使用split()方法,需要的朋友可以參考下
    2023-11-11
  • 幾個提升Python運行效率的方法之間的對比

    幾個提升Python運行效率的方法之間的對比

    這篇文章主要介紹了幾個提升Python運行效率的方法之間的對比,包括使用Cython和PyPy等這些熱門方法,需要的朋友可以參考下
    2015-04-04
  • 如何在 Django 模板中輸出

    如何在 Django 模板中輸出 "{{"

    這篇文章主要介紹了如何在 Django 模板中輸出 "{{" ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 詳解操作python容器的內置通用函數(shù)

    詳解操作python容器的內置通用函數(shù)

    這篇文章主要為大家介紹了操作python容器的內置通用函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明

    Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明

    這篇文章主要介紹了Python之random.sample()和numpy.random.choice()的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

潢川县| 尉犁县| 万年县| 蓬溪县| 余江县| 延津县| 临湘市| 琼海市| 尤溪县| 汝州市| 奉新县| 宜阳县| 嘉善县| 新密市| 莱阳市| 连云港市| 江阴市| 承德市| 都兰县| 始兴县| 茶陵县| 邵武市| 庄河市| 西乌| 吴旗县| 鄯善县| 乡城县| 涟水县| 宁河县| 丹江口市| 彰化市| 青神县| 潞城市| 富顺县| 如皋市| 东安县| 科尔| 临海市| 盐山县| 奉新县| 渝中区|