分享2个Python处理Excel的脚本

简介: 分享2个Python处理Excel的脚本

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

本知识概要

  • pandas创建一个DataFrame对象
    pd.DataFrame()
  • pandas datafrmae索引
    按列名索引:dataframe[列名]
    按列值索引:dataframe[dataframe[列名]==列值]
  • pandas 读取、存储excel文件,存储csv文件
    read_excel、to_excel、to_csv
  • pandas datafrmae根据缩影取指定行数据
    dataframe.loc[list]
  • pandas datafrmae修改列名
    dataframe.rename(columns={'column_name_old':'column_name_new'})
  • pandas datafrmae将数据插入到指定列
    dataframe.insert(loc=列序号,column=列名,value=列值)
  • pandas datafrmae根据列名删除指定列
    dataframe.drop([列名],axis=1)
  • pandas 连接多个datafrmae
    pd.concat([df_1, df_2])

开始动手动脑

第一个读者需求

首先我们先看第一个读者的需求:原始数据有18个Excel文件,每个Excel文件里有34个sheet(34个省的相关数据),需要取出每个sheet中指定的几行数据,然后全部合并起来,存储到一个新的文件,命名为2000_2017年各省份碳排放数据。

经过沟通,我确定了最终输出文件的样式,以下数据都是用Excel中的随机函数生成:image.png

完成这个需求,如果是手动操作我们需要完成以下几个步骤:

0、新建一个Excel

1、打开第一个Excel

2、复制出每个sheet中需要的几行数据

3、将复制出来的数据粘贴到新建的Excel中

4、重复1-3,直到取出所有Excel中的数据

5、保存新建的Excel

如果只是1-2个文件,动手还可以接受,但是要是有几十个,几百个,如果靠动手就头大了。

现在我们看看以上手动操作换成代码操作需要那些步骤:

0、新建一个数据存储对象(我们用pandas中的Dataframe)

1、读取目标Excel文件

2、遍历取出每个sheet中需要的几行数据,存储到新建的Dataframe中

3、for循环遍历,读取所有目标Excel数据,并存储到新建的Dataframe中

4、将新建的Dataframe数据保存为一个Excel文件

了解了这些后,我们就开始愉快的代码之旅吧:

0、新建一个数据存储对象(我们用pandas中的Dataframe)

df_concat = pd.DataFrame()

1、读取目标Excel文件

文件一共有18个文件,文件名也是有规则的。

file_path = 'data/2000年-2017年碳排放清单/2000年30个省份排放清单.xlsx'
data = pd.read_excel(file_path, sheet_name=None)

2、遍历取出每个sheet中需要的几行数据,存储到新建的Dataframe中

为了代码的可读性,这里写了一个函数get_sheet_data来取出单个sheet中需要的数据,然后for循环遍历所有的sheet。

'''
取出单个sheet中需要的数据
'''
def get_sheet_data(data, sheet_name, year):
    # 取需要的几行数据
    df_concat = data[sheet_name].loc[[2,3,48,49]]
    # 给 Unnamed: 0 列进行重命名
    df_concat = df_concat.rename(columns={'Unnamed: 0':'类别'})
    # 插入两列数据 省份 年份
    df_concat.insert(loc=0,column='省份',value=sheet_name)
    df_concat.insert(loc=1,column='年份',value=i)
    # 将Total这列移动到第四列
    df_temp = df_concat['Total']
    df_concat = df_concat.drop(['Total'],axis=1)  # 先删除该列
    df_concat.insert(loc=3,column='Total',value=df_temp)  # 然后插入到第四列位置
    return df_concat
for sheet_name in list(data.keys()):
        if sheet_name == 'Sum':
            continue
        df_temp = get_sheet_data(data, sheet_name, year)
        df_concat = pd.concat([df_concat, df_temp])

3、for循环遍历,读取所有目标Excel数据,并存储到新建的Dataframe中

在上一步,已经读取出了单个Excel中的所有sheet,现在再利用for循环遍历读取所有Excel中的数据。

'''
取出单个Excel中需要的数据
'''
def get_excel_data(data, year):
    df_concat = pd.DataFrame()
    for sheet_name in list(data.keys()):
        if sheet_name == 'Sum':
            continue
        df_temp = get_sheet_data(data, sheet_name, year)
        df_concat = pd.concat([df_concat, df_temp])
    return df_concat
# 生成一个列表,存储时间
date_year = [str(i) for i in range(2000, 2018)]
for i in date_year:
    file_path = 'data/2000年-2017年碳排放清单/%s年30个省份排放清单.xlsx'%i
    data = pd.read_excel(file_path, sheet_name=None)
    df_temp = get_excel_data(data, i)
    df_concat = pd.concat([df_concat, df_temp])

4、将新建的Dataframe数据保存为一个Excel文件

这里直接调用pandas内置的to_excel函数,第一个参数为文件存储目录,第二个参数为sheet_name,第三个参数是编码格式,这里指定为utf-8。

print("开始存储数据")
df_concat.to_excel("data/2000_2017年省份碳排放数据.xlsx", "2000_2017", index=None, encoding="utf-8")
print("数据保存成功")

完整代码如下:

import pandas as pd
import time
'''
取出单个sheet中需要的数据
'''
def get_sheet_data(data, sheet_name, year):
    # 取需要的几行数据
    df_concat = data[sheet_name].loc[[2,3,48,49]]
    # 给 Unnamed: 0 列进行重命名
    df_concat = df_concat.rename(columns={'Unnamed: 0':'类别'})
    # 插入两列数据 省份 年份
    df_concat.insert(loc=0,column='省份',value=sheet_name)
    df_concat.insert(loc=1,column='年份',value=i)
    # 将Total这列移动到第四列
    df_temp = df_concat['Total']
    df_concat = df_concat.drop(['Total'],axis=1)  # 先删除该列
    df_concat.insert(loc=3,column='Total',value=df_temp)  # 然后插入到第四列位置
    return df_concat
'''
取出单个Excel中需要的数据
'''
def get_excel_data(data, year):
    df_concat = pd.DataFrame()
    for sheet_name in list(data.keys()):
        if sheet_name == 'Sum':
            continue
        df_temp = get_sheet_data(data, sheet_name, year)
        df_concat = pd.concat([df_concat, df_temp])
    return df_concat
# 0、新建一个数据存储对象(我们用pandas中的Dataframe)
df_concat = pd.DataFrame()
# 生成一个列表,存储时间
date_year = [str(i) for i in range(2000, 2018)]
# 1、遍历取出每个Excel中的每个sheet中需要的几行数据,存储到新建的Dataframe中
for i in date_year:
    file_path = 'data/2000年-2017年碳排放清单/%s年30个省份排放清单.xlsx'%i
    data = pd.read_excel(file_path, sheet_name=None)
    df_temp = get_excel_data(data, i)
    df_concat = pd.concat([df_concat, df_temp])
# 2、写入数据
print("开始存储数据")
df_concat.to_excel("data/2000_2017年省份碳排放数据.xlsx", "2000_2017", index=None, encoding="utf-8")
print("数据保存成功")

第二个读者需求

image.png

我们来看第二个读者的需求:原数据只有一个文件,里面有8个sheet,需要将每个sheet中的几列取出来,然后根据日期存储为一个一个的csv文件。

完成这个需求,如果是手动操作我们需要完成以下几个步骤:

0、打开Excel文件

1、复制出每个sheet中需要的几行数据

2、根据日期进行排序

3、按日期将不同的数据存入不同csv文件

看似很简单,但实际却是复杂的,比如要手动创建保存365个csv文件,文件名字还不一样,想着就头大!

现在我们看看以上手动操作换成代码操作需要那些步骤:

0、新建一个数据存储对象(我们用pandas中的Dataframe)

1、读取目标Excel文件

2、遍历取出每个sheet中需要的几行数据,存储到新建的Dataframe中

3、根据日期进行分组,将不同日期数据存储到对应的文件

了解了这些后,我们就开始愉快的代码之旅吧:0、新建一个数据存储对象(我们用pandas中的Dataframe)

df_concat = pd.DataFrame()

1、读取目标Excel文件

file_path = 'data/meteo_china_tmin_2018.xlsx'
data = pd.read_excel(file_path, sheet_name=None)

2、遍历取出每个sheet中需要的几行数据,存储到新建的Dataframe中

for sheet_name in list(data.keys()):
    if sheet_name == 'meteo_china_tmin_2018':
        continue
    df_temp = data[sheet_name][['ymd', 'lat', 'lon', 'tmin']]
    df_concat = pd.concat([df_concat, df_temp])

3、根据日期进行分组,将不同日期数据存储到对应的文件

这里根据日期进行检索对应的数据,并调用to_csv函数存储数据,第一个参数为存储的目录,第二个参数columns为存储的数据列,第三个参数header=None表示存储的时候不需要表头,第四个参数index=False表示去除索引。

'''
按时间进行分组,并保存为csv文件
文件格式:hetao-ymd_tmin
'''
# 获取所有日期
ymd_set = set(df_concat['ymd'])
# 循环操作所有数据
for ymd in ymd_set:
    ymd_data = df_concat[df_concat['ymd']==ymd]
    ymd_data.to_csv('./data/hetao/hetao-%d_tmin.csv'%ymd, columns=['lat', 'lon', 'tmin'], header=None, index=False)

完整代码:

import pandas as pd
'''
读取、取出需要的数据并合并
'''
file_path = './data/meteo_china_tmin_2018.xlsx'
data = pd.read_excel(file_path, sheet_name=None)
df_concat = pd.DataFrame()
for sheet_name in list(data.keys()):
    if sheet_name == 'meteo_china_tmin_2018':
        continue
    df_temp = data[sheet_name][['ymd', 'lat', 'lon', 'tmin']]
    df_concat = pd.concat([df_concat, df_temp])
'''
按时间进行分组,并保存为csv文件
文件格式:hetao-ymd_tmin
'''
# 获取所有日期
ymd_set = set(df_concat['ymd'])
# 循环操作所有数据
for ymd in ymd_set:
    ymd_data = df_concat[df_concat['ymd']==ymd]
    # 指定存储的列,并且去掉表头
    ymd_data.to_csv('./data/hetao/hetao-%d_tmin.csv'%ymd, columns=['lat', 'lon', 'tmin'], header=None, index=False)

随便说说

五一结束,祝大家新的一周搬砖快乐。

另外大家如果有什么类似需求,或者想要本文所有相关样例数据和代码的,可以扫下方二维码添加我的微信,查看朋友圈获取。

欢迎大家进行学习交流。

相关文章
|
15天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
23天前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
8天前
|
数据采集 存储 监控
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
39 7
21个Python脚本自动执行日常任务(2)
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
128 68
|
16天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
24 7
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
88 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
20天前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
26天前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
1月前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
62 2
|
1月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
76 3