利用Python+Pandas实现从一个excel表中提取列形成新表

简要
利用python实现把一个工作表中的某些列,和其中单独的一列,提取成为一个个新表。
如图(处理前)蓝色部分是需要保留的列,红色是需要一项一项分出来作为单独表格的列。
其中,第一行的名字是用的回车作为分隔,所以在提取名字时需要去除\n。
整体思路就是先保留前六列,然后加上后面的每一列,每加一列的同事加一个单独的sheets,最后获取第一行每一列的名字,将sheets进行命名。
在这里插入图片描述
如图(处理后)分出来的省份变为了文件名,列为专业人数,并且去除了空值。
在这里插入图片描述

1、导入文件
首先import panda as pd,随后通过pd.panda 导入工作表。

data = pd.read_excel("D:\\PycharmProjects\\hellow\\excel\\招生信息.xlsx")#打开原始工作表

文件目录采用双斜线替换了反斜线,避免了因为误识别文件目录为转义符导致的错误,类似解决错误转义符出错的方法如下。
(1)路径前加‘r’
(2)替换为双斜线
(3)替换为正斜线
详情可转到文章(运行python文件报SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: tr):https://blog.csdn.net/xd060606/article/details/87164798
2、获取工作表行数列数

lens = data.shape[1]  # 获取行数 shape[1]获取列数
rows = data.shape[0]  # 获取行数 shape[0]获取行数

3、判断单元格内元素是否为数字

def is_number(uchar):
    """判断一个unicode是否是数字"""
    if uchar >= u'\u0030' and uchar <= u'\u0039':
        return True
    else:
        return False
def format_str(content):

4、只提取字符串中的汉字函数

def is_chinese(uchar):
    """判断一个unicode是否是汉字"""
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
        return True
    else:
        return False
    '''只提取字符串中的汉字函数'''
    content_str = ''
    for i in content:
        if is_chinese(i):
            content_str = content_str + i
    return content_str

此函数可实现输入一个含有字符串,只提取字符串中的汉字并返回。
详情可见文章(python字符串只保留汉字):
https://blog.csdn.net/u012155582/article/details/78587394
5、判断单元格有数字并提取分列

df_list_all=[]#预定义一个空列表存储所有的sheets
for department in range(6, lens):#对第六列以后的每一列进行提取
    df_list = pd.DataFrame()#定义空pd.dataframe
    for i in range(1, rows):#对每一行进行遍历
        if is_number(str(data.iloc[i][department])) == True:#判断单元格的值为数字,仅提取有数据的行
            df_list = pd.concat([df_list, data.iloc[[i], [0, 1, 2, 3, 4, 5, department]]], axis=0, ignore_index=True)#提取0,1,2,3,4,5,department列
    df_list_all.append(df_list)#利用append把所有整理好的分列表进行汇总
writer = pd.ExcelWriter('D:\\Users\\79033\\PycharmProjects\\hellow\\excel\\new.xlsx')  # 利用pd.ExcelWriter()存多张sheets

6、保存工作表并重命名

for i in range(len(df_list_all)):#保存sheets到new.xlsx
    name=str(data.iloc[[1],i+6])#提取每一分列第一行对应字符串
    name=zifu_hanzi.format_str(name)#将列名保存下来
    df_list_all[i].to_excel(writer, sheet_name=name, index=False)  # 注意加上index=FALSE 去掉index列
writer.save()#保存文件

7、完整代码

"""
把excel表按照某列拆分成多个表
具体为保留前六列的前提下,把第六列以后的每一列都形成一个分表 ,并且不存在空元素
"""


import pandas as pd

data = pd.read_excel("D:\\Users\\79033\\PycharmProjects\\hellow\\excel\\招生信息.xlsx")#打开原始工作表
lens = data.shape[1]  # 获取行数 shape[1]获取列数
rows = data.shape[0]  # 获取行数 shape[0]获取行数



def is_chinese(uchar):
    """判断一个unicode是否是汉字"""
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
        return True
    else:
        return False
def is_number(uchar):
    """判断一个unicode是否是数字"""
    if uchar >= u'\u0030' and uchar <= u'\u0039':
        return True
    else:
        return False
def format_str(content):
    '''只提取字符串中的汉字函数'''
    content_str = ''
    for i in content:
        if is_chinese(i):
            content_str = content_str + i
    return content_str


df_list_all=[]#预定义一个空列表存储所有的sheets
for department in range(6, lens):#对第六列以后的每一列进行提取
    df_list = pd.DataFrame()#定义空pd.dataframe
    for i in range(1, rows):#对每一行进行遍历
        if is_number(str(data.iloc[i][department])) == True:#判断单元格的值为数字,仅提取有数据的行
            df_list = pd.concat([df_list, data.iloc[[i], [0, 1, 2, 3, 4, 5, department]]], axis=0, ignore_index=True)#提取0,1,2,3,4,5,department列
    df_list_all.append(df_list)#利用append把所有整理好的分列表进行汇总
writer = pd.ExcelWriter('D:\\Users\\79033\\PycharmProjects\\hellow\\excel\\new.xlsx')  # 利用pd.ExcelWriter()存多张sheets


for i in range(len(df_list_all)):#保存sheets到new.xlsx
    name=str(data.iloc[[1],i+6])#提取每一分列第一行对应字符串
    name=zifu_hanzi.format_str(name)#将列名保存下来
    df_list_all[i].to_excel(writer, sheet_name=name, index=False)  # 注意加上index=FALSE 去掉index列
writer.save()#保存文件

学习python几个月了,写了几次代码,学习过程中参考了很多大佬的博客,自己第一次写博客,一方面为了做笔记吧,一方面也为了方便大家。本程序是自己写的,但是也借鉴了许多别人的地方,文中已用链接标出,希望大家喜欢,谢谢各位大佬们!!

  • 28
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在现代办公室环境中,处理Excel文件是日常工作的一部分。Python作为一种功能强大的编程语言,提供了许多库和工具来简化这一任务。特别是,当我们需要从Excel文件中提取包含中文字符的字符串时,Python可以提供快速有效的解决方案。Python通过pandas库可以轻松读取Excel文件,并使用正则表达式来匹配和提取所需的字符串。以下是一个简单的步骤说明:导入必要的库:首先,我们需要导入pandas库来读取Excel文件,以及re库来使用正则表达式。读取Excel文件:使用pandas的read_excel函数,我们可以加载Excel文件并将其转换为DataFrame对象。提取字符串:接下来,我们可以使用str.extract方法和正则表达式来提取包含中文字符的字符串。中文字符通常可以使用Unicode范围来匹配。保存结果:最后,我们可以将提取的字符串保存到新的Excel文件中,或者根据需要进行进一步处理。这个Python自动化办公源码可以帮助用户节省大量的时间和精力,避免了手动查找和提取字符串的繁琐工作。通过简单的代码,我们可以轻松地完成这项任务,提高工作效率,确保数据的准确性和一致性。总之,Python提供了一种快速、高效的方法来提取Excel文件中的中文字符串。无论是数据分析、文本处理还是其他办公任务,Python都可以成为您的强大助手,帮助您更好地应对日常办公挑战。重新回答||

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“猩球崛起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值