Excel analysis skill

Analyze Excel spreadsheets, create pivot tables, generate charts, and perform data analysis.

by davila7·MIT license·★ 32,299 Stars on the repo·GitHub ↗

Use now

Files of Excel analysis

davila7/main1 file shown
SKILL.md
Show the full text248 lines

Excel Analysis

Quick start

Read Excel files with pandas:

import pandas as pd

# Read Excel file
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")

# Display first few rows
print(df.head())

# Basic statistics
print(df.describe())

Reading multiple sheets

Process all sheets in a workbook:

import pandas as pd

# Read all sheets
excel_file = pd.ExcelFile("workbook.xlsx")

for sheet_name in excel_file.sheet_names:
    df = pd.read_excel(excel_file, sheet_name=sheet_name)
    print(f"\n{sheet_name}:")
    print(df.head())

Data analysis

Perform common analysis tasks:

import pandas as pd

df = pd.read_excel("sales.xlsx")

# Group by and aggregate
sales_by_region = df.groupby("region")["sales"].sum()
print(sales_by_region)

# Filter data
high_sales = df[df["sales"] > 10000]

# Calculate metrics
df["profit_margin"] = (df["revenue"] - df["cost"]) / df["revenue"]

# Sort by column
df_sorted = df.sort_values("sales", ascending=False)

Creating Excel files

Write data to Excel with formatting:

import pandas as pd

df = pd.DataFrame({
    "Product": ["A", "B", "C"],
    "Sales": [100, 200, 150],
    "Profit": [20, 40, 30]
})

# Write to Excel
writer = pd.ExcelWriter("output.xlsx", engine="openpyxl")
df.to_excel(writer, sheet_name="Sales", index=False)

# Get worksheet for formatting
worksheet = writer.sheets["Sales"]

# Auto-adjust column widths
for column in worksheet.columns:
    max_length = 0
    column_letter = column[0].column_letter
    for cell in column:
        if len(str(cell.value)) > max_length:
            max_length = len(str(cell.value))
    worksheet.column_dimensions[column_letter].width = max_length + 2

writer.close()

Pivot tables

Create pivot tables programmatically:

import pandas as pd

df = pd.read_excel("sales_data.xlsx")

# Create pivot table
pivot = pd.pivot_table(
    df,
    values="sales",
    index="region",
    columns="product",
    aggfunc="sum",
    fill_value=0
)

print(pivot)

# Save pivot table
pivot.to_excel("pivot_report.xlsx")

Charts and visualization

Generate charts from Excel data:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("data.xlsx")

# Create bar chart
df.plot(x="category", y="value", kind="bar")
plt.title("Sales by Category")
plt.xlabel("Category")
plt.ylabel("Sales")
plt.tight_layout()
plt.savefig("chart.png")

# Create pie chart
df.set_index("category")["value"].plot(kind="pie", autopct="%1.1f%%")
plt.title("Market Share")
plt.ylabel("")
plt.savefig("pie_chart.png")

Data cleaning

Clean and prepare Excel data:

import pandas as pd

df = pd.read_excel("messy_data.xlsx")

# Remove duplicates
df = df.drop_duplicates()

# Handle missing values
df = df.fillna(0)  # or df.dropna()

# Remove whitespace
df["name"] = df["name"].str.strip()

# Convert data types
df["date"] = pd.to_datetime(df["date"])
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")

# Save cleaned data
df.to_excel("cleaned_data.xlsx", index=False)

Merging and joining

Combine multiple Excel files:

import pandas as pd

# Read multiple files
df1 = pd.read_excel("sales_q1.xlsx")
df2 = pd.read_excel("sales_q2.xlsx")

# Concatenate vertically
combined = pd.concat([df1, df2], ignore_index=True)

# Merge on common column
customers = pd.read_excel("customers.xlsx")
sales = pd.read_excel("sales.xlsx")

merged = pd.merge(sales, customers, on="customer_id", how="left")

merged.to_excel("merged_data.xlsx", index=False)

Advanced formatting

Apply conditional formatting and styles:

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font

# Create Excel file
df = pd.DataFrame({
    "Product": ["A", "B", "C"],
    "Sales": [100, 200, 150]
})

df.to_excel("formatted.xlsx", index=False)

# Load workbook for formatting
wb = load_workbook("formatted.xlsx")
ws = wb.active

# Apply conditional formatting
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
green_fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type="solid")

for row in range(2, len(df) + 2):
    cell = ws[f"B{row}"]
    if cell.value < 150:
        cell.fill = red_fill
    else:
        cell.fill = green_fill

# Bold headers
for cell in ws[1]:
    cell.font = Font(bold=True)

wb.save("formatted.xlsx")

Performance tips

  • Use read_excel with usecols to read specific columns only
  • Use chunksize for very large files
  • Consider using engine='openpyxl' or engine='xlrd' based on file type
  • Use dtype parameter to specify column types for faster reading

Available packages

  • pandas - Data analysis and manipulation (primary)
  • openpyxl - Excel file creation and formatting
  • xlrd - Reading older .xls files
  • xlsxwriter - Advanced Excel writing capabilities
  • matplotlib - Chart generation
1---
2name: Excel Analysis
3description: Analyze Excel spreadsheets, create pivot tables, generate charts, and perform data analysis. Use when analyzing Excel files, spreadsheets, tabular data, or .xlsx files.
4---
5 
6# Excel Analysis
7 
8## Quick start
9 
10Read Excel files with pandas:
11 
12```python
13import pandas as pd
14 
15# Read Excel file
16df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
17 
18# Display first few rows
19print(df.head())
20 
21# Basic statistics
22print(df.describe())
23```
24 
25## Reading multiple sheets
26 
27Process all sheets in a workbook:
28 
29```python
30import pandas as pd
31 
32# Read all sheets
33excel_file = pd.ExcelFile("workbook.xlsx")
34 
35for sheet_name in excel_file.sheet_names:
36 df = pd.read_excel(excel_file, sheet_name=sheet_name)
37 print(f"\n{sheet_name}:")
38 print(df.head())
39```
40 
41## Data analysis
42 
43Perform common analysis tasks:
44 
45```python
46import pandas as pd
47 
48df = pd.read_excel("sales.xlsx")
49 
50# Group by and aggregate
51sales_by_region = df.groupby("region")["sales"].sum()
52print(sales_by_region)
53 
54# Filter data
55high_sales = df[df["sales"] > 10000]
56 
57# Calculate metrics
58df["profit_margin"] = (df["revenue"] - df["cost"]) / df["revenue"]
59 
60# Sort by column
61df_sorted = df.sort_values("sales", ascending=False)
62```
63 
64## Creating Excel files
65 
66Write data to Excel with formatting:
67 
68```python
69import pandas as pd
70 
71df = pd.DataFrame({
72 "Product": ["A", "B", "C"],
73 "Sales": [100, 200, 150],
74 "Profit": [20, 40, 30]
75})
76 
77# Write to Excel
78writer = pd.ExcelWriter("output.xlsx", engine="openpyxl")
79df.to_excel(writer, sheet_name="Sales", index=False)
80 
81# Get worksheet for formatting
82worksheet = writer.sheets["Sales"]
83 
84# Auto-adjust column widths
85for column in worksheet.columns:
86 max_length = 0
87 column_letter = column[0].column_letter
88 for cell in column:
89 if len(str(cell.value)) > max_length:
90 max_length = len(str(cell.value))
91 worksheet.column_dimensions[column_letter].width = max_length + 2
92 
93writer.close()
94```
95 
96## Pivot tables
97 
98Create pivot tables programmatically:
99 
100```python
101import pandas as pd
102 
103df = pd.read_excel("sales_data.xlsx")
104 
105# Create pivot table
106pivot = pd.pivot_table(
107 df,
108 values="sales",
109 index="region",
110 columns="product",
111 aggfunc="sum",
112 fill_value=0
113)
114 
115print(pivot)
116 
117# Save pivot table
118pivot.to_excel("pivot_report.xlsx")
119```
120 
121## Charts and visualization
122 
123Generate charts from Excel data:
124 
125```python
126import pandas as pd
127import matplotlib.pyplot as plt
128 
129df = pd.read_excel("data.xlsx")
130 
131# Create bar chart
132df.plot(x="category", y="value", kind="bar")
133plt.title("Sales by Category")
134plt.xlabel("Category")
135plt.ylabel("Sales")
136plt.tight_layout()
137plt.savefig("chart.png")
138 
139# Create pie chart
140df.set_index("category")["value"].plot(kind="pie", autopct="%1.1f%%")
141plt.title("Market Share")
142plt.ylabel("")
143plt.savefig("pie_chart.png")
144```
145 
146## Data cleaning
147 
148Clean and prepare Excel data:
149 
150```python
151import pandas as pd
152 
153df = pd.read_excel("messy_data.xlsx")
154 
155# Remove duplicates
156df = df.drop_duplicates()
157 
158# Handle missing values
159df = df.fillna(0) # or df.dropna()
160 
161# Remove whitespace
162df["name"] = df["name"].str.strip()
163 
164# Convert data types
165df["date"] = pd.to_datetime(df["date"])
166df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
167 
168# Save cleaned data
169df.to_excel("cleaned_data.xlsx", index=False)
170```
171 
172## Merging and joining
173 
174Combine multiple Excel files:
175 
176```python
177import pandas as pd
178 
179# Read multiple files
180df1 = pd.read_excel("sales_q1.xlsx")
181df2 = pd.read_excel("sales_q2.xlsx")
182 
183# Concatenate vertically
184combined = pd.concat([df1, df2], ignore_index=True)
185 
186# Merge on common column
187customers = pd.read_excel("customers.xlsx")
188sales = pd.read_excel("sales.xlsx")
189 
190merged = pd.merge(sales, customers, on="customer_id", how="left")
191 
192merged.to_excel("merged_data.xlsx", index=False)
193```
194 
195## Advanced formatting
196 
197Apply conditional formatting and styles:
198 
199```python
200import pandas as pd
201from openpyxl import load_workbook
202from openpyxl.styles import PatternFill, Font
203 
204# Create Excel file
205df = pd.DataFrame({
206 "Product": ["A", "B", "C"],
207 "Sales": [100, 200, 150]
208})
209 
210df.to_excel("formatted.xlsx", index=False)
211 
212# Load workbook for formatting
213wb = load_workbook("formatted.xlsx")
214ws = wb.active
215 
216# Apply conditional formatting
217red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
218green_fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type="solid")
219 
220for row in range(2, len(df) + 2):
221 cell = ws[f"B{row}"]
222 if cell.value < 150:
223 cell.fill = red_fill
224 else:
225 cell.fill = green_fill
226 
227# Bold headers
228for cell in ws[1]:
229 cell.font = Font(bold=True)
230 
231wb.save("formatted.xlsx")
232```
233 
234## Performance tips
235 
236- Use `read_excel` with `usecols` to read specific columns only
237- Use `chunksize` for very large files
238- Consider using `engine='openpyxl'` or `engine='xlrd'` based on file type
239- Use `dtype` parameter to specify column types for faster reading
240 
241## Available packages
242 
243- **pandas** - Data analysis and manipulation (primary)
244- **openpyxl** - Excel file creation and formatting
245- **xlrd** - Reading older .xls files
246- **xlsxwriter** - Advanced Excel writing capabilities
247- **matplotlib** - Chart generation
248 

Discussion