利用pandas处理复杂表格
最近想到以前的一个面试题,是关于从某个网站采集表格,然后用pandas处理成指定的格式,当时看了完全是不知如何着手,现在用了一些时间,终于把这题给解决了,虽然耗时不少,还是挺有成就感的。下面就分享下个人的处理方式:
采集的表格样式
对方要求处理后的样式
爬取下载表格的方式这里就不做赘述了,毕竟这部分代码大同小异,着重分享下处理表格的代码:
# 先导入需要的包
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import random
import numpy as np
import re
import calendar
import datetime
import os
os.chdir(r'D:\CDA\File')
# 考虑带有数字的行对应英文的描述,故做个英文判断
def is_english(keyword): # 判断是否为全英文,是返回Truereturn all(ord(c) < 128 for c in keyword)def add_str(data_,n): # 当数字行对应英文描述时,不确定向上找几行才是日文名称,故用个向上查找方式进行h=''for e in data_.iloc[n-1::-1,0]:if is_english(e[:3]):h=e+helse:h=e+':'+hbreakreturn hdef item(data,k): # 对有数据的行进行名称是否为英文的判断,一般都是先日文,再英文描述。把一种产品的日文、英文捆在一起,中间用:隔开a=[]for j in data.iloc[k:,0]:if type(j)==str:if not is_english(j[:3]):b=j+':'a.append(b)if len(a)>1:del bbreakelse:try:bexcept:b=add_str(data,k)a.append(b)b=b+jelse:b=b+jz=b.replace(' ','').replace('\n','')return zdef isfloat(x): # 判断产品日文、英文描述的几行是否有数据,有则返回True,最终可被执行处理if pd.isna(x):return Falsetry:float(x)except:return Falseelse:return Truedef get_all_lines(row_df): # 先将品目(含日文、英文描述,生成单位)及数值清洗为标准格式all_line=[]for i,row in row_df.iterrows():if isfloat(row[3]): # 金额line=':'.join([item(row_df,i),'生産(P):金額(百万円):(millionyen)']),row[3]all_line.append(line)if isfloat(row[2]): # 数量quantity = row_df.iloc[i+1,1]quantity = quantity if pd.notnull(quantity) else f'({row[1]})'if re.search('千.+',row[1]) == None: # 对方要求的格式中涉及到数量单位都要求化大至千,而有些产品单位需要进行转换 quantity='(10³'+f'{row[1]})'row[1]='千'+row[1]row[2]=int(row[2]/pow(10,3))line=':'.join([item(row_df,i),'生産(P)',f'数量({row[1]})',f'Quantity{quantity}']),row[2]all_line.append(line)return all_linedef last_day(date): # 得到对方要求格式中的日期,表格中获取year=date.yearmonth=date.monthx,y = calendar.monthrange(year,month) # 得到当年当月第一天所处的星期数,及最后一天final_date=datetime.date(year=year,month=month,day=y)return final_date# 下载文件,通过爬虫代码下载的表格
file_name=data_file() # 解析文件
df=pd.read_excel(file_name,sheet_name='電子部品',header=None)
df1=df.iloc[:,:4] # 获取第一段产品数据
df1.columns=['品目','单位','数量','金额']
df2=df.iloc[:,5:9] # 获取第二段产品数据
df2.columns=['品目','单位','数量','金额']df_=pd.concat([df1,df2],ignore_index=True) # 两端拼凑为一段
df_.dropna(how='all',inplace=True) # 去除全为空的记录
df_.reset_index(drop=True,inplace= True) # 原表格上重置索引all_lines=get_all_lines(df_) # 执行前面的函数,将品目及数值处理成标准格式
row_date = df.iloc[0,5]
use_date = last_day(row_date) # 执行前面函数,处理日期result_df=pd.DataFrame(all_lines,columns=["品目","值"])
result_df["时间"]=use_date
result_df=result_df.reindex(columns=["品目", "时间", "值"]) # 整理成最终版本,及对方需要的格式
save_name = 'doc'+os.path.sep+"电子部品整理后_" + file_name.split('\\')[-1]result_df.to_excel(save_name,index=False) # 存为标准格式文件
利用pandas处理复杂表格相关推荐
- c语言读取excel表格_利用pandas处理excel表格
这不是一篇详细介绍pandas的文章,只是我在利用python处理excel表格时找到的一些临时方案,为了避免忘记,记录在这里,也可能对你有帮助. pandas在对excel处理上使用的是xlrd和x ...
- python利用pandas合并excel表格代码_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
- pandas爬取表格数据
利用pandas 方法: 1.soup = BeautifulSoup(html.content, 'lxml', from_encoding='utf-8') 2.pd.read_html() 请求 ...
- Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略
Python之Pandas:利用Pandas函数实现对表格文件的查之高级查询(类似sql,分组查询等)之详细攻略 目录 利用Pandas函数实现对表格文件的查之高级查询(类似sql) 1.分组查询
- 【利用python+pandas 拆分excel表格】
利用python拆分excel表格 我们常常会遇到一个表格中包含各种类型的数据,想要把表格按照不同类型拆分到多个工作簿,使用python几行代码就可以轻松搞定 首先是安装需要的包 先cmd命令行安装下 ...
- 利用python模块pandas获取网页表格,并保存为excel
文章只用于学习交流 利用python模块pandas获取网页表格. 网页上的表格内容,想要保存下来,有没有办法呢?答案是有的. 主要有两个步骤, 一是读取表格内容, 二是保存读取后的内容. 在这里只讲 ...
- python处理excel表格-Python利用pandas处理Excel数据的应用
最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储,那么而利用p ...
- 利用pandas读写HDF5文件
一.简介 HDF5(Hierarchical Data Formal)是用于存储大规模数值数据的较为理想的存储格式,文件后缀名为h5,存储读取速度非常快,且可在文件内部按照明确的层次存储数据,同一个H ...
- 利用python处理excel表格
利用python处理excel表格 注意事项:在excel打开状态下无法进行写入和保存,但是可以读取. 1.excel的两种格式(xlsx,xls) 建议使用xlsx,遇到xls统统都用pandas转 ...
最新文章
- linux 内存管理slab源码,Linux内核源代码情景分析-内存管理之slab-回收
- YBTOJ:红与蓝(博弈论)
- 商家自述:今年双11,我们更难了
- 给PhotoShop安装Portraiture插件
- 045 Android Studio 常用应用
- 省市县三级联动多种实现方式
- AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
- 【CSS练习】IT修真院--练习6-护工列表界面
- 工作4年从美团、陌陌、百度、阿里面试回来感想
- mysql无法退出命令行
- BUUCTF misc 专题(72)喵喵喵
- 阿里P6员工月薪2万4, 被女友嫌弃, 晒出女友月薪, 以为看错了
- 金融申请评分卡(3)
- 重磅!Pytorch宝典来了!
- maya! board_maya人物跑步动画制作中文教程
- konva实现图层跟随鼠标缩放或者根据中心位置缩放
- NPOI以文本流的方式导出多个EXCEL,打开其中文件报“Excel 已完成文件级验证和修复.....或丢弃”
- JavaScript __ 对象小记
- Postman异步请求
- 前端黑科技:美团网页首帧优化实践