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)替换为正斜线
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字符串只保留汉字):
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)#提取
python怎么读取excel某一列
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⼏个⽉了,写了⼏次代码,学习过程中参考了很多⼤佬的博客,⾃⼰第⼀次写博客,⼀⽅⾯为了做笔记吧,⼀⽅⾯也为了⽅便⼤家。本程序是⾃⼰写的,但是也借鉴了许多别⼈的地⽅,⽂中已⽤链接标出,希望⼤家喜欢,谢谢各位⼤佬们!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论