偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

精通 Pandas:五大核心技巧助你玩轉(zhuǎn) Excel 數(shù)據(jù)處理

開(kāi)發(fā) 大數(shù)據(jù)
本文將深入探討使用 Pandas 處理 Excel 文件的五個(gè)高級(jí)技巧,助你從基礎(chǔ)操作晉升為數(shù)據(jù)處理高手。

在數(shù)據(jù)分析領(lǐng)域,Python的Pandas庫(kù)無(wú)疑是處理表格數(shù)據(jù)的王者。而對(duì)于廣大與Excel打了多年交道的用戶(hù)來(lái)說(shuō),利用Pandas能夠?qū)⒎爆嵉氖謩?dòng)操作自動(dòng)化,極大地提升工作效率。本文將深入探討使用Pandas處理Excel文件的五個(gè)高級(jí)技巧,助你從基礎(chǔ)操作晉升為數(shù)據(jù)處理高手。

技巧一:精準(zhǔn)讀取,駕馭非標(biāo)準(zhǔn)格式的Excel文件

現(xiàn)實(shí)工作中的Excel文件往往格式各異,數(shù)據(jù)并非總是整齊地從A1單元格開(kāi)始。Pandas強(qiáng)大的read_excel函數(shù)提供了豐富的參數(shù),可以幫助我們精準(zhǔn)地定位并讀取所需數(shù)據(jù)。

(1) 處理復(fù)雜表頭與指定數(shù)據(jù)區(qū)域

面對(duì)包含多行標(biāo)題、注釋或者格式不規(guī)范的Excel表格,直接讀取通常會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)亂。此時(shí),我們可以利用header和usecols參數(shù)來(lái)解決問(wèn)題。

  • header參數(shù):用于指定將哪一行作為列名。它可以是一個(gè)整數(shù)(行號(hào),從0開(kāi)始索引)或一個(gè)整數(shù)列表(用于創(chuàng)建多級(jí)索引)。例如,如果實(shí)際的表頭在文件的第三行,我們可以設(shè)置header=2。
  • usecols參數(shù):用于選擇要讀取的列。它可以是列名的列表(如 ['ColumnA', 'ColumnB'])、列號(hào)的列表(如 [0, 2, 4]),甚至是Excel的列范圍表示法(如 'A:C,E')。 此外,usecols還支持傳入一個(gè)函數(shù),對(duì)每一列的名稱(chēng)進(jìn)行判斷,返回True則讀取該列,這在處理大量且列名不固定的文件時(shí)非常有用。

代碼示例:

假設(shè)我們有一個(gè)Excel文件sales.xlsx,其數(shù)據(jù)從第3行開(kāi)始,我們只需要讀取“產(chǎn)品名稱(chēng)”、“銷(xiāo)量”和“銷(xiāo)售額”這三列。

import pandas as pd

# header=2 表示將第3行作為表頭
# usecols 指定需要讀取的列
df = pd.read_excel(
    'sales.xlsx',
    header=2,
    usecols=['產(chǎn)品名稱(chēng)', '銷(xiāo)量', '銷(xiāo)售額']
)

print(df.head())

(2) 跳過(guò)特定行與讀取指定行數(shù)

有時(shí)候,我們需要跳過(guò)文件開(kāi)頭的幾行或者結(jié)尾的匯總行。skiprows和nrows參數(shù)可以輕松實(shí)現(xiàn)這一需求。

  • skiprows: 可以是一個(gè)整數(shù)(跳過(guò)開(kāi)頭的N行)或一個(gè)列表(跳過(guò)指定的行號(hào))。
  • nrows: 用于指定從文件開(kāi)頭讀取的行數(shù),這在處理超大文件時(shí),先預(yù)覽一小部分?jǐn)?shù)據(jù)非常有用。

通過(guò)組合這些參數(shù),無(wú)論Excel文件的結(jié)構(gòu)多么復(fù)雜,我們都能像做外科手術(shù)一樣,精確地提取出所需的數(shù)據(jù)。

技巧二:性能優(yōu)化,高效處理海量Excel數(shù)據(jù)

當(dāng)Excel文件體積達(dá)到數(shù)百兆甚至數(shù)G時(shí),直接用read_excel加載可能會(huì)導(dǎo)致內(nèi)存溢出和長(zhǎng)時(shí)間的等待。 以下是幾個(gè)關(guān)鍵的性能優(yōu)化技巧。

(1) 分塊讀取(chunksize)

對(duì)于內(nèi)存無(wú)法一次性容納的大文件,chunksize參數(shù)是最佳解決方案。設(shè)置chunksize后,read_excel會(huì)返回一個(gè)迭代器,我們可以逐塊處理數(shù)據(jù),從而極大地降低內(nèi)存消耗。

代碼示例:

import pandas as pd

# 設(shè)置每個(gè)數(shù)據(jù)塊包含10000行
chunk_iterator = pd.read_excel('large_sales_data.xlsx', chunksize=10000)

# 初始化一個(gè)空的DataFrame用于匯總結(jié)果
processed_data = pd.DataFrame()

for chunk in chunk_iterator:
    # 對(duì)每個(gè)數(shù)據(jù)塊進(jìn)行處理,例如篩選、計(jì)算等
    filtered_chunk = chunk[chunk['銷(xiāo)售額'] > 1000]
    processed_data = pd.concat([processed_data, filtered_chunk], ignore_index=True)

print(processed_data.shape)

(2) 優(yōu)化數(shù)據(jù)類(lèi)型(dtype)

Pandas在讀取數(shù)據(jù)時(shí),默認(rèn)會(huì)使用int64或float64等內(nèi)存占用較大的數(shù)據(jù)類(lèi)型。如果明確知道某列的數(shù)據(jù)范圍,可以在讀取時(shí)通過(guò)dtype參數(shù)指定更節(jié)省內(nèi)存的類(lèi)型,如int32、float32,或者將重復(fù)度高的文本列指定為category類(lèi)型。這能顯著降低DataFrame的內(nèi)存占用。

代碼示例:

import pandas as pd

# 為特定列指定更優(yōu)的數(shù)據(jù)類(lèi)型
dtypes = {
    '用戶(hù)ID': 'int32',
    '產(chǎn)品類(lèi)別': 'category',
    '價(jià)格': 'float32'
}

df_optimized = pd.read_excel('sales_data.xlsx', dtype=dtypes)

# 查看優(yōu)化后的內(nèi)存使用情況
print(df_optimized.info(memory_usage='deep'))

(3) 選擇更快的解析引擎

Pandas讀取Excel文件依賴(lài)于底層的解析引擎。默認(rèn)情況下,.xlsx文件使用openpyxl,.xls文件使用xlrd。在寫(xiě)入Excel時(shí),xlsxwriter通常比openpyxl具有更好的性能。

技巧三:樣式美化與自動(dòng)化,打造高可讀性的Excel報(bào)告

將數(shù)據(jù)分析結(jié)果導(dǎo)出為Excel時(shí),若能自動(dòng)應(yīng)用樣式,無(wú)疑會(huì)使報(bào)告更具專(zhuān)業(yè)性和可讀性。Pandas的Styler對(duì)象結(jié)合XlsxWriter引擎,可以讓我們通過(guò)編程方式為Excel文件添加豐富的格式。

(1) 使用Styler對(duì)象設(shè)置樣式

Styler對(duì)象允許我們鏈?zhǔn)秸{(diào)用各種方法,對(duì)DataFrame進(jìn)行樣式設(shè)置,這些樣式最終可以被導(dǎo)出到Excel中。 我們可以設(shè)置字體、顏色、背景色、對(duì)齊方式和數(shù)據(jù)格式等。

  • Styler.applymap(): 對(duì)每個(gè)單元格應(yīng)用樣式。
  • Styler.apply(): 對(duì)行或列應(yīng)用樣式。
  • Styler.highlight_max() / Styler.highlight_min(): 高亮最大值或最小值。
  • Styler.background_gradient(): 應(yīng)用條件格式的背景色漸變。

代碼示例:

###注意:要提前pip install openpyxl
import pandas as pd
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
data = {'產(chǎn)品': ['A', 'B', 'C', 'D'],
        '第一季度': [150, 200, 180, 220],
        '第二季度': [170, 190, 210, 180],
        '增長(zhǎng)率': [0.13, -0.05, 0.17, -0.18]}
df = pd.DataFrame(data)

# 定義樣式函數(shù)
def style_negative_red(val):
    color = 'red'if val < 0else'black'
    returnf'color: {color}'

# 應(yīng)用樣式
styled_df = df.style.format({'增長(zhǎng)率': '{:.2%}'}) \
                   .map(style_negative_red, subset=['增長(zhǎng)率']) \
                   .highlight_max(subset=['第一季度', '第二季度'], color='lightgreen') \
                   .background_gradient(cmap='viridis', subset=['第一季度', '第二季度'])

# 導(dǎo)出到Excel
with pd.ExcelWriter('styled_report.xlsx', engine='openpyxl') as writer:
    styled_df.to_excel(writer, sheet_name='季度報(bào)告', index=False)

注意:to_excel方法導(dǎo)出樣式時(shí),需要依賴(lài)openpyxl或xlsxwriter庫(kù)。

技巧四:多工作表(Sheet)高效處理

一個(gè)Excel工作簿中常常包含多個(gè)結(jié)構(gòu)相似的工作表,例如各分公司的月度銷(xiāo)售數(shù)據(jù)。Pandas可以高效地一次性讀取所有或指定的多個(gè)工作表,并進(jìn)行合并處理。

(1) 一次性讀取多個(gè)工作表

在read_excel中,將sheet_name參數(shù)設(shè)置為None,可以讀取所有工作表,并返回一個(gè)以工作表名稱(chēng)為鍵、DataFrame為值的字典。如果傳入一個(gè)工作表名稱(chēng)的列表,則只讀取指定的工作表。

代碼示例:

import pandas as pd

# 讀取所有工作表
all_sheets_dict = pd.read_excel('regional_sales.xlsx', sheet_name=None)

# 合并所有工作表的數(shù)據(jù),并添加一列指明來(lái)源工作表
all_data = []
for sheet_name, df in all_sheets_dict.items():
    df['來(lái)源地區(qū)'] = sheet_name
    all_data.append(df)

merged_df = pd.concat(all_data, ignore_index=True)
print(merged_df.head())

(2) 將一個(gè)DataFrame拆分到多個(gè)工作表

反之,我們也可以將一個(gè)大的DataFrame根據(jù)某個(gè)分類(lèi)列的值,拆分到不同的工作表中寫(xiě)入。

代碼示例:

import pandas as pd

# 假設(shè)merged_df是包含所有地區(qū)銷(xiāo)售數(shù)據(jù)的DataFrame
with pd.ExcelWriter('sales_by_region.xlsx') as writer:
    for region, data in merged_df.groupby('來(lái)源地區(qū)'):
        # 將每個(gè)地區(qū)的數(shù)據(jù)寫(xiě)入一個(gè)單獨(dú)的sheet,index=False表示不寫(xiě)入行索引
        data.to_excel(writer, sheet_name=region, index=False)

技巧五:高級(jí)數(shù)據(jù)處理,函數(shù)應(yīng)用與數(shù)據(jù)透視

Pandas的強(qiáng)大遠(yuǎn)不止于讀寫(xiě),其核心優(yōu)勢(shì)在于強(qiáng)大的數(shù)據(jù)處理和分析能力,可以替代Excel中復(fù)雜的數(shù)據(jù)透視表和函數(shù)操作。

(1) 靈活的函數(shù)應(yīng)用(apply)

apply方法可以將一個(gè)自定義函數(shù)應(yīng)用于DataFrame的行或列,實(shí)現(xiàn)高度定制化的數(shù)據(jù)轉(zhuǎn)換和計(jì)算。

代碼示例:

import pandas as pd

df = pd.DataFrame({'單價(jià)': [10, 20, 30], '數(shù)量': [5, 8, 6]})

# 定義一個(gè)計(jì)算總價(jià)(考慮折扣)的函數(shù)
def calculate_total(row):
    price = row['單價(jià)'] * row['數(shù)量']
    if price > 150:
        return price * 0.9  # 超過(guò)150元打九折
    return price

# axis=1 表示按行應(yīng)用函數(shù)
df['總價(jià)'] = df.apply(calculate_total, axis=1)
print(df)

(2) 強(qiáng)大的數(shù)據(jù)透視(pivot_table)

pivot_table是Pandas中實(shí)現(xiàn)數(shù)據(jù)透視功能的利器,功能與Excel的數(shù)據(jù)透視表類(lèi)似但更為靈活。它可以根據(jù)一個(gè)或多個(gè)鍵對(duì)數(shù)據(jù)進(jìn)行聚合,輕松完成分類(lèi)匯總統(tǒng)計(jì)。

代碼示例:

import pandas as pd

# 假設(shè)有包含“日期”、“城市”、“產(chǎn)品類(lèi)別”、“銷(xiāo)售額”的DataFrame
# df_sales = pd.read_excel('all_sales.xlsx')

# 創(chuàng)建數(shù)據(jù)透視表,按城市和產(chǎn)品類(lèi)別匯總銷(xiāo)售額
pivot = pd.pivot_table(
    df_sales,
    values='銷(xiāo)售額',
    index='城市',
    columns='產(chǎn)品類(lèi)別',
    aggfunc='sum',  # 聚合函數(shù)為求和
    fill_value=0    # 對(duì)缺失值填充為0
)

print(pivot)

掌握以上五個(gè)技巧,你將能更加從容地應(yīng)對(duì)各種復(fù)雜的Excel處理任務(wù),將重復(fù)性的工作交給代碼,從而聚焦于更有價(jià)值的數(shù)據(jù)洞察和分析。

責(zé)任編輯:趙寧寧 來(lái)源: Python數(shù)智工坊
相關(guān)推薦

2025-06-06 08:35:41

2013-12-30 10:40:12

大數(shù)據(jù)處理大數(shù)據(jù)Hadoop

2013-12-27 16:15:11

Hadoop大數(shù)據(jù)處理

2023-09-25 13:19:41

pandasPython

2023-03-24 16:41:36

Pandas技巧數(shù)據(jù)處理

2019-04-12 10:03:38

云端數(shù)據(jù)集成數(shù)字化

2010-11-10 10:29:51

職場(chǎng)

2019-09-18 20:28:26

大數(shù)據(jù)數(shù)據(jù)處理數(shù)據(jù)采集

2017-04-26 23:10:03

數(shù)據(jù)組織數(shù)據(jù)庫(kù)

2020-12-21 13:55:44

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

2010-08-05 14:16:37

路由器配置

2017-01-12 17:19:02

數(shù)據(jù)中心葉脊架構(gòu)網(wǎng)絡(luò)標(biāo)準(zhǔn)

2017-01-12 11:07:25

網(wǎng)絡(luò)數(shù)據(jù)技巧

2023-10-16 23:53:22

數(shù)據(jù)索引工具

2025-07-16 07:05:00

2011-04-21 16:51:16

一體電腦處理器

2022-11-17 11:52:35

pandasPySpark大數(shù)據(jù)

2024-05-08 14:05:03

時(shí)間序列數(shù)據(jù)

2022-09-29 00:30:03

元宇宙科技營(yíng)銷(xiāo)

2009-07-09 17:50:43

服務(wù)器整合數(shù)據(jù)中心云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)