1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python按某列拆分excel表格_利用Python+Pandas实现从一个excel表中提取列形成新表

python按某列拆分excel表格_利用Python+Pandas实现从一个excel表中提取列形成新表

时间:2024-07-27 17:58:29

相关推荐

python按某列拆分excel表格_利用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):/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字符串只保留汉字):

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。