6、pandas-excel

在数据分析和处理领域,Excel文件是常见的数据存储格式之一。Pandas库提供了强大的功能来读取、处理和写入Excel文件。本文将详细介绍如何使用Pandas操作Excel文件,包括读取、数据清洗、数据操作和写入等步骤。

安装

首先,确保你已经安装了Pandas库以及用于读写Excel文件的库(如 openpyxlxlrd)。你可以使用以下命令进行安装:

pip install pandas openpyxl

读取 Excel

基本用法

import pandas as pd
 
# 读取Excel文件
df = pd.read_excel('data.xlsx')
print(df.head())

read_excel()函数说明

pandas.read_excel(io, sheet_name=0, *, header=0, names=None, index_col=None, usecols=None, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=<no_default>, date_format=None, thousands=None, decimal='.', comment=None, skipfooter=0, storage_options=None, dtype_backend=<no_default>, engine_kwargs=None)

参数说明:

指定工作表

如果Excel文件包含多个工作表,可以使用 sheet_name 参数指定要读取的工作表

# 读取名为 'Sheet1' 的工作表
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())

指定单元格范围

可以使用 usecols 参数指定要读取的列范围,使用 skiprowsnrows 参数指定要跳过的行和读取的行数

# 读取第1到第3列,跳过前2行,读取10行
df = pd.read_excel('data.xlsx', usecols="A:C", skiprows=2, nrows=10)
print(df.head())

数据检查与预处理

查看数据的基本信息

使用 head()tail()info()describe() 函数可以查看数据的基本信息:

print(df.head())  # 显示前5行
print(df.tail())  # 显示后5行
print(df.info())  # 显示数据类型和缺失值信息
print(df.describe())  # 显示统计信息

数据类型检查与转换

可以使用 dtypes 属性查看数据类型,并使用 astype() 函数进行类型转换

print(df.dtypes)
df['Column1'] = df['Column1'].astype('int')

检查缺失值

使用 isnull()sum() 函数检查缺失值

print(df.isnull().sum())

处理缺失值

可以使用 fillna() 函数填充缺失值,或使用 dropna() 函数删除包含缺失值的行或列

# 填充缺失值
df.fillna(0, inplace=True)
 
# 删除包含缺失值的行
df.dropna(inplace=True)

数据清洗与转换

重命名列

使用 rename() 函数重命名列

df.rename(columns={'OldName': 'NewName'}, inplace=True)

删除重复数据

使用 drop_duplicates() 函数删除重复数据

df.drop_duplicates(inplace=True)

数据替换

使用 replace() 函数进行数据替换

df['Column1'].replace(10, 20, inplace=True)

数据排序

使用 sort_values() 函数进行数据排序:

df.sort_values(by='Column1', ascending=False, inplace=True)

数据分组与聚合

使用 groupby()agg() 函数进行数据分组与聚合

grouped = df.groupby('Category')
result = grouped['Value'].agg(['mean', 'sum'])
print(result)

数据选择与过滤

按标签选择

使用 loc 按标签选择数据

subset = df.loc[df['Column1'] > 10]
print(subset)

按位置选择

subset = df.iloc[0:5, 1:3]
print(subset)

布尔索引

使用布尔索引进行数据过滤

subset = df[df['Column1'] > 10]
print(subset)

多条件过滤

subset = df[(df['Column1'] > 10) & (df['Column2'] < 20)]
print(subset)

数据操作

添加、删除行、列

使用 insert() 函数添加行、列,使用 drop() 函数删除列

df.insert(1, 'NewColumn', [1, 2, 3, 4, 5])

# 删除行
df.drop(1,axis=0)
# 删除列
df.drop(columns=['OldColumn'], inplace=True)

drop函数详解

df.drop(labels = None, axis = 0, index = None, columns = None, level = None, inplace = False,errors = 'raise')

参数解释:

数据框合并

使用 concat()merge()join() 函数进行数据框合并

# 使用 concat() 合并
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
result = pd.concat([df1, df2], ignore_index=True)
 
# 使用 merge() 合并
df1 = pd.DataFrame({'key': ['K0', 'K1'], 'A': [1, 2]})
df2 = pd.DataFrame({'key': ['K0', 'K1'], 'B': [3, 4]})
result = pd.merge(df1, df2, on='key')
 
# 使用 join() 合并
df1 = pd.DataFrame({'A': [1, 2]}, index=['K0', 'K1'])
df2 = pd.DataFrame({'B': [3, 4]}, index=['K0', 'K1'])
result = df1.join(df2)

数据透视表

使用 pivot_table() 函数创建数据透视表:

pivot_table = df.pivot_table(values='Value', index='Category', columns='Year', aggfunc='mean')
print(pivot_table)

交叉表

使用 crosstab() 函数创建交叉表:

crosstab = pd.crosstab(df['Category'], df['Year'])
print(crosstab)

写入Excel文件

基本用法

使用 pd.DataFrame.to_excel() 函数将DataFrame写入Excel文件

df.to_excel('output.xlsx', index=False)

to_excel()函数说明

DataFrame.to_excel(excel_writer, *, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, inf_rep='inf', freeze_panes=None, storage_options=None, engine_kwargs=None)

参数说明:

指定工作表名称

可以使用 sheet_name 参数指定工作表名称

df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

指定单元格位置

df.to_excel('output.xlsx', startrow=1, startcol=2, index=False)

处理多个工作表

使用 ExcelWriter 类处理多个工作表

with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

设置样式和格式

可以使用 openpyxl 库设置单元格样式和格式

from openpyxl import Workbook
from openpyxl.styles import Font
 
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook = writer.book
    worksheet = workbook['Sheet1']
    for cell in worksheet['A'] + worksheet['B']:
        cell.font = Font(bold=True)