Python Excel数据简单处理记录
[TOC]
正在备研的大三把不少东西忘的一干二净的我,花了两个小时对Python的pandas库进行复健最后实现老师那边提出的要求,这里是一些记录
Pandas是Python中最强大的数据分析库之一,它提供了丰富的功能来操作Excel文件。以下是使用Pandas处理Excel文件的详细介绍:
pandas基本操作
1. 基本读写操作
读取Excel文件
import pandas as pd
# 读取整个Excel文件
df = pd.read_excel('file.xlsx') # 默认读取第一个sheet
# 读取指定sheet
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
# 读取多个sheet
dfs = pd.read_excel('file.xlsx', sheet_name=['Sheet1', 'Sheet2'])
# 指定列数据类型
df = pd.read_excel('file.xlsx', dtype={'列名': str})
# 跳过行或选择特定行
df = pd.read_excel('file.xlsx', skiprows=3) # 跳过前3行
df = pd.read_excel('file.xlsx', nrows=100) # 只读取前100行
写入Excel文件
# 将DataFrame写入Excel
df.to_excel('output.xlsx', index=False) # index=False表示不写入索引列
# 写入多个sheet
with pd.ExcelWriter('output.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet2')
# 追加数据到已有Excel文件(需安装openpyxl)
with pd.ExcelWriter('existing_file.xlsx', mode='a', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='NewSheet')
2. 数据处理功能
数据筛选
# 选择特定列
df[['列名1', '列名2']]
# 条件筛选
filtered_df = df[df['列名'] > 100] # 数值条件
filtered_df = df[df['列名'].str.contains('文本')] # 文本条件
数据修改
# 修改列名
df.rename(columns={'旧列名': '新列名'}, inplace=True)
# 添加新列
df['新列名'] = df['列1'] + df['列2']
# 删除列
df.drop(['列名1', '列名2'], axis=1, inplace=True)
# 填充缺失值
df.fillna(0, inplace=True) # 用0填充
df.fillna(method='ffill', inplace=True) # 用前一个值填充
数据排序和分组
# 排序
df.sort_values(by='列名', ascending=False, inplace=True)
# 分组统计
grouped = df.groupby('分组列')['数值列'].sum()
3. 高级功能
样式设置(需结合openpyxl或xlsxwriter)
# 使用xlsxwriter引擎创建带样式的Excel
writer = pd.ExcelWriter('styled.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# 添加格式
format1 = workbook.add_format({'bold': True, 'font_color': 'red'})
# 应用格式
worksheet.set_column('A:A', 20, format1)
writer.save()
处理大数据集
# 分块读取大数据文件
chunk_size = 10000
chunks = pd.read_excel('large_file.xlsx', chunksize=chunk_size)
for chunk in chunks:
process(chunk) # 对每个数据块进行处理
处理日期和时间
# 将列转换为日期格式
df['日期列'] = pd.to_datetime(df['日期列'])
# 提取日期部分
df['年'] = df['日期列'].dt.year
df['月'] = df['日期列'].dt.month
4. 常见注意事项
-
依赖库:Pandas需要额外安装
openpyxl
或xlrd
库来处理.xlsx
文件pip install pandas openpyxl xlsxwriter
-
性能考虑:对于非常大的Excel文件,考虑分块读取或使用专门的数据库
-
格式兼容性:
.xlsx
格式推荐使用openpyxl
引擎,.xls
格式使用xlrd
引擎 -
内存管理:处理完数据后及时关闭ExcelWriter对象
Pandas为Excel操作提供了强大而灵活的工具,可以满足从简单数据读取到复杂数据处理的各种需求。
使用Pandas读取Excel并生成HTTP页面
下面是一个完整的Python代码示例,它使用Pandas读取Excel文件,并将内容转换为美观的HTTP页面:
import pandas as pd
from http.server import HTTPServer, BaseHTTPRequestHandler
class ExcelHTMLHandler(BaseHTTPRequestHandler):
def do_GET(self):
# 读取Excel文件
try:
df = pd.read_excel('data.xlsx') # 修改为你的Excel文件名
# 生成HTML内容
html_content = """
<!DOCTYPE html>
<html>
<head>
<title>Excel数据展示</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
line-height: 1.6;
}
.container {
max-width: 800px;
margin: 0 auto;
}
.data-row {
border: 1px solid #ddd;
padding: 15px;
margin-bottom: 20px;
border-radius: 5px;
background-color: #f9f9f9;
}
.row-header {
font-weight: bold;
color: #333;
margin-bottom: 10px;
padding-bottom: 5px;
border-bottom: 1px solid #eee;
}
.data-item {
margin-bottom: 5px;
}
h1 {
color: #2c3e50;
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h1>Excel数据展示</h1>
"""
# 遍历所有行
for index, row in df.iterrows():
if not row.isnull().all():
html_content += f"""
<div class="data-row">
<div class="row-header">记录 {index+1}</div>
"""
for column_name, value in row.items():
if not pd.isnull(value):
html_content += f"""
<div class="data-item">
<strong>{column_name}:</strong> {value}
</div>
"""
html_content += "</div>\n"
html_content += """
</div>
</body>
</html>
"""
# 发送HTTP响应
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
self.wfile.write(html_content.encode('utf-8'))
except Exception as e:
self.send_response(500)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(f"Error processing Excel file: {str(e)}".encode('utf-8'))
def run_server():
# 设置服务器地址和端口
server_address = ('', 8000)
httpd = HTTPServer(server_address, ExcelHTMLHandler)
print("服务器已启动,访问 http://localhost:8000")
httpd.serve_forever()
if __name__ == '__main__':
run_server()
功能说明
-
Excel读取:
- 使用
pd.read_excel()
读取Excel文件 - 自动处理所有工作表和列
- 使用
-
HTML生成:
- 为数据创建美观的响应式布局
- 每个Excel行显示为一个独立的卡片
- 包含CSS样式使页面更美观
- 自动跳过空行和空值
-
HTTP服务器:
- 内置Python HTTP服务器
- 访问 http://localhost:8000 即可查看结果
- 自动处理编码问题(UTF-8)
使用说明
- 将上述代码保存为
excel_to_http.py
- 确保同目录下有名为
data.xlsx
的Excel文件(或修改代码中的文件名) - 安装依赖库:
pip install pandas
- 运行程序:
python excel_to_http.py
- 打开浏览器访问 http://localhost:8000
扩展建议
- 如果需要处理多个Excel文件,可以修改代码接受URL参数
- 可以添加搜索功能,使用JavaScript在客户端过滤数据
- 对于大型Excel文件,考虑添加分页功能
- 可以添加下载原始Excel文件的功能
Python Excel具体操作
要提取Excel文件中的行,可以使用pandas库对数据进行处理
- 直接通过pandas库获取数据
import pandas as pd
# 读取Excel文件
df = pd.read_excel('XXXX.xls')
# 打印表格数据
print(df)
# 提取特定列的数据
column_data = df['题目']
# 提取特定行的数据
row_data = df.loc[row_index]
# 遍历所有行
for index, row in df.iterrows():
# 处理每一行的数据
print(row['题目'])
emmm…直接提出出来的文件实际上是只有题目这一列的内容脚本需要进一步更改
注意:如果整行数据,使用
row.values
输出整行数据,其中row.values
是包含该行数据的NumPy数组
import pandas as pd
import re
# 读取Excel文件
df = pd.read_excel('path_to_excel_file.xls')
# 遍历所有行
for index, row in df.iterrows():
# 提取当前行的数据
row_data = row
# 输出整行数据
print("Row", index)
for column_name, value in row_data.iteritems():
# 输出每一列的数据
print(column_name, ":", value)
print()
为实现可读性的要求,简单对代码进行处理将其存放在txt文档里,完整代码如下
import pandas as pd
import re
# 读取Excel文件
df = pd.read_excel('test_question_831.xls')
# 获取有效列名列表
column_names = df.columns.tolist()
# 打印有效列名
print(column_names)
# 打开文本文件以写入模式
with open('output2.txt', 'w', encoding='utf-8') as file:
# 遍历所有行
for index, row in df.iterrows():
# 提取当前行的数据
row_data = row
# 输出整行数据并写入文本文件
file.write(f"Row {index}\n")
for column_name, value in row_data.iteritems():
# 如果列不为空,则输出列名和对应的值并写入文本文件
if not pd.isnull(value):
line = f"{column_name}: {value}\n"
print(line)
file.write(line)
file.write('\n')
然后打开txt文件我就看到了那还有一大堆图片,貌似有一些标签写的还有问题…
- 将文件保存为html
import pandas as pd
import re
# 读取Excel文件
df = pd.read_excel('test_question_831.xls')
# 获取有效列名列表
column_names = df.columns.tolist()
# 打印有效列名
print(column_names)
# 创建HTML字符串
html_content = "<html><body>\n"
# 遍历所有行
for index, row in df.iterrows():
# 提取当前行的数据
row_data = row
# 检查是否有非空列
if not row_data.isnull().all():
# 输出整行数据到HTML字符串
html_content += f"<p>Row {index}</p>\n"
for column_name, value in row_data.iteritems():
# 如果列不为空,则输出列名和对应的值到HTML字符串
if not pd.isnull(value):
html_content += f"<p>{column_name}: {value}</p>\n"
html_content += "<br>\n"
# 完成HTML字符串
html_content += "</body></html>"
# 将HTML字符串写入HTML文件
with open('output.html', 'w', encoding='utf-8') as file:
file.write(html_content)
HCIP怎么样先放一边,至少是Python复健了,下一步应该拿Python爬虫对老题库进行下爬取,把之前的题目删除,在看本次新增题目的覆盖率了
初略一看还行