Python高效處理Excel文件的12個Pandas函數(shù)總結
更新時間:2025年12月02日 09:47:17 作者:東眠的魚
Pandas是Python中處理Excel文件的強大工具,下面我將詳細介紹12個最常用的高效處理Excel文件的Pandas函數(shù),并提供代碼演示,需要的朋友可以參考下
1.“pd.read_excel()”- 讀取Excel文件
- 讀取Excel文件到DataFrame中,支持多種參數(shù)控制讀取方式。
import pandas as pd
# 基本讀取
df = pd.read_excel('data.xlsx')
# 讀取特定工作表
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 讀取特定列
df = pd.read_excel('data.xlsx', usecols=['Name', 'Age'])
# 讀取特定行范圍
df = pd.read_excel('data.xlsx', nrows=100) # 只讀取前100行
2.“DataFrame.to_excel()”- 寫入Excel文件
- 將DataFrame寫入Excel文件,支持多種格式控制。
# 基本寫入
df.to_excel('output.xlsx')
# 不寫入索引
df.to_excel('output.xlsx', index=False)
# 寫入特定工作表
with pd.ExcelWriter('output.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1')
# 格式化輸出
with pd.ExcelWriter('formatted.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Sheet1')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# 設置列寬
worksheet.set_column('A:A', 20)
# 添加格式
format1 = workbook.add_format({'bold': True, 'font_color': 'red'})
worksheet.write(0, 0, 'Important Header', format1)
3. “pd.ExcelFile”- 處理多個工作表
- 高效處理包含多個工作表的Excel文件。
with pd.ExcelFile('multi_sheet.xlsx') as xls:
# 獲取所有工作表名
sheet_names = xls.sheet_names
# 讀取特定工作表
df1 = pd.read_excel(xls, sheet_names[0])
df2 = pd.read_excel(xls, sheet_names[1])
# 或者使用字典存儲所有工作表
all_sheets = {sheet: pd.read_excel(xls, sheet) for sheet in sheet_names}
4.“DataFrame.head()”- 查看前幾行
- 快速查看DataFrame的前幾行數(shù)據(jù)。
# 查看前5行(默認) print(df.head()) # 查看前10行 print(df.head(10))
5.“DataFrame.tail()”- 查看后幾行
- 快速查看DataFrame的后幾行數(shù)據(jù)。
# 查看后5行(默認) print(df.tail()) # 查看后3行 print(df.tail(3))
6.“DataFrame.info()”- 查看數(shù)據(jù)概覽
- 獲取DataFrame的摘要信息,包括列數(shù)據(jù)類型和內(nèi)存使用情況。
df.info()
7. “DataFrame.describe()”- 統(tǒng)計摘要
- 生成描述性統(tǒng)計信息,包括計數(shù)、均值、標準差、最小值、四分位數(shù)和最大值。
# 對所有數(shù)值列生成統(tǒng)計信息 print(df.describe()) # 對特定列生成統(tǒng)計信息 print(df['Age'].describe()) # 包含非數(shù)值列 print(df.describe(include='all'))
8. “DataFrame.dropna()”- 處理缺失值
- 刪除包含缺失值的行或列。
# 刪除包含任何缺失值的行 df_clean = df.dropna() # 刪除包含任何缺失值的列 df_clean = df.dropna(axis=1) # 只刪除全為缺失值的行 df_clean = df.dropna(how='all') # 刪除在特定列中包含缺失值的行 df_clean = df.dropna(subset=['Age', 'Salary'])
9. “DataFrame.fillna()”- 填充缺失值
- 用指定值或方法填充缺失值。
# 用0填充所有缺失值
df_filled = df.fillna(0)
# 用前一個有效值填充(向前填充)
df_filled = df.fillna(method='ffill')
# 用后一個有效值填充(向后填充)
df_filled = df.fillna(method='bfill')
# 用列均值填充
df_filled = df.fillna(df.mean())
# 對不同列使用不同的填充值
fill_values = {'Age': df['Age'].median(), 'Department': 'Unknown'}
df_filled = df.fillna(fill_values)
10. “DataFrame.groupby()”- 分組聚合
- 根據(jù)一個或多個鍵對數(shù)據(jù)進行分組,然后對每個組應用聚合函數(shù)。
# 基本分組
grouped = df.groupby('Department')
# 計算每個部門的平均工資
avg_salary = grouped['Salary'].mean()
# 多列分組
multi_grouped = df.groupby(['Department', 'Gender'])
# 多種聚合操作
agg_result = multi_grouped['Salary'].agg(['mean', 'median', 'count'])
# 分組后應用多個函數(shù)
result = df.groupby('Department').agg({'Salary': ['mean', 'max'],'Age': 'min'})
11.“DataFrame.merge()”- 合并數(shù)據(jù)
- 基于共同列合并兩個DataFrame。
# 創(chuàng)建示例DataFrame
df1 = pd.DataFrame({
'EmployeeID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({
'EmployeeID': [1, 2, 4],
'Salary': [70000, 80000, 90000]})
# 內(nèi)連接(默認)
merged = pd.merge(df1, df2, on='EmployeeID')
# 左連接
left_merged = pd.merge(df1, df2, on='EmployeeID', how='left')
# 右連接
right_merged = pd.merge(df1, df2, on='EmployeeID', how='right')
# 外連接
outer_merged = pd.merge(df1, df2, on='EmployeeID', how='outer')
# 合并多個鍵
df3 = pd.DataFrame({
'EmployeeID': [1, 1, 2],
'Date': ['2022-01-01', '2022-02-01', '2022-01-15'],
'Performance': [4.5, 4.7, 3.9]})
merged_multi = pd.merge(df1, df3, on='EmployeeID')
12.“DataFrame.apply()”- 應用自定義函數(shù)
- 對DataFrame的行或列應用自定義函數(shù)。
# 創(chuàng)建示例DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Salary': [50000, 60000, 70000]})
# 對列應用函數(shù) - 計算獎金(薪資的10%)
df['Bonus'] = df['Salary'].apply(lambda x: x * 0.1)
# 對行應用函數(shù) - 創(chuàng)建全名
df['Full_Name'] = df.apply(lambda row: f"{row['Name']} ({row['Age']})", axis=1)
# 定義更復雜的函數(shù)
def calculate_tax(salary, age):
if age > 30:
return salary * 0.2
else:
return salary * 0.15
df['Tax'] = df.apply(lambda row: calculate_tax(row['Salary'], row['Age']), axis=1)
# 使用applymap對每個元素應用函數(shù)(適用于元素級操作)
df = df.applymap(lambda x: str(x).upper() if isinstance(x, str) else x)
額外技巧:處理大文件
- 對于大型Excel文件,可以使用
chunksize參數(shù)分塊讀取:
# 分塊讀取大文件
chunk_size = 10000 # 每次讀取的行數(shù)
chunks = pd.read_excel('large_file.xlsx', chunksize=chunk_size)
# 處理每個塊
for i, chunk in enumerate(chunks):
# 處理數(shù)據(jù)
processed_chunk = process_data(chunk)
# 寫入輸出文件(追加模式)
if i == 0:
processed_chunk.to_excel('output.xlsx', index=False)
else:
with pd.ExcelWriter('output.xlsx', mode='a', engine='openpyxl') as writer:
processed_chunk.to_excel(writer, sheet_name=f'Chunk_{i}', index=False)
這些函數(shù)組合使用可以高效完成Excel數(shù)據(jù)的讀取、清洗、分析和輸出任務。根據(jù)具體需求選擇合適的函數(shù)和方法,可以顯著提高數(shù)據(jù)處理效率
總結
以上就是Python高效處理Excel文件的12個Pandas函數(shù)總結的詳細內(nèi)容,更多關于Python處理Excel的Pandas函數(shù)的資料請關注腳本之家其它相關文章!
相關文章
Python數(shù)據(jù)分析之Python和Selenium爬取BOSS直聘崗位
今天教各位小伙伴怎么用Python和Selenium爬取BOSS直聘崗位,文中有非常詳細的代碼示例,對正在學習python爬蟲和數(shù)據(jù)分析的小伙伴有很好地幫助,需要的朋友可以參考下2021-05-05
Pytorch之tensorboard無法啟動和顯示問題及解決
這篇文章主要介紹了Pytorch之tensorboard無法啟動和顯示問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

