前情提要:蓬佩奥不怕开水烫:XLOOKUP函数简单使用指南

之前这篇文章里面,是使用的word对报表进行处理,相对简单快捷;但是,数据量比较大比较复杂的情况下,用word处理起来会有点吃力。

因此,我钻研了一个下午,写了个python脚本,中间还遇到不少问题,不过还是写出来了,以后再处理类似的报表的时候,就不用再打开word了。

信息来源:东方财富Choice数据-2019年电子信息行业财务报表-利润表

原始Excel有很多问题:股票代码不是标准的六位数字;万亿不分,没有单位;有多余的数据行。

这里使用Python 3 的Pandas库进行整理,主要使用pandas库基本操作。

#读取准备好的财务报表
import pandas as pd
import re
input_file = r"电子信息行业利润表.xlsx"
df = pd.read_excel(input_file)df=df.drop(['序号','相关','公告日期'],axis=1) #删除不需要的列

然后用format补全六位代码,在这里居然也卡了很久,最后发现错误原因竟然是没有重新赋值!!

在学习python的过程中,遇到的最大的困难是什么?

#六位股票代码补全
def six_digits(stock_num):stock_num=str("{0:06d}".format(stock_num))return(stock_num)df['股票代码']=df['股票代码'].apply(lambda x:six_digits(x))

把列名称规范一下。其实这一步我也不是太清楚怎么给每一列批量重命名,有知道的可以告诉我。

#列标题重命名
df=df.rename(columns={'净利润':'净利润(亿元)','净利润同比':'净利润同比(%)','营业总收入':'营业总收入(亿元)','营业总收入同比':'营业总收入同比(%)','营业支出':'营业支出(亿元)','销售费用':'销售费用(亿元)','管理费用':'管理费用(亿元)','财务费用':'财务费用(亿元)','营业总支出':'营业总支出(亿元)','营业利润':'营业利润(亿元)', '利润总额':'利润总额(亿元)'})

然后规范一下单位。这里需要用到正则表达式了。

两个正则表达式,分别匹配所有“万”“亿”为单位的金额;

#引入正则表达式,去除万亿等单位
wan_pattern = re.compile('(?P<amount>(-|)d{1,4}[万])')
yi_pattern = re.compile('(?P<amount>(-|)d*.*d*[亿])')

转换为亿元

def amt_process(amt):str1=str(amt)if wan_pattern.search(str1):new_amt=float(str1.rstrip("万"))/10000 #去掉“万”结尾并除以10000return('{:.3f}'.format(new_amt)) #保留三位小数elif yi_pattern.search(str1):new_amt=float(str1.rstrip("亿")) #直接去掉“亿”结尾return('{:.2f}'.format(new_amt)) #保留两位小数else:return(amt)df=df.applymap(amt_process) #对DataFrame所有元素应用数值处理函数

输出一下DataFrame,看上去好像没什么不对:

但是输出Excel以后,出现了问题

df.to_excel(r"电子信息行业利润表(已整理).xlsx",sheet_name="利润表",index=False)

正则表达式处理之后,输出的全部为文本型数值。

问题出在哪里呢?我们发现,出错的列,数据类型都不是我们需要的float64

看到了这两篇文章:

乘风:Pandas数据类型转换的几个小技巧

Pandas DataFrame将多列数据一次性从object转换为datetime

决定试试

amount=[]
for x in df.columns.tolist():if "(亿元)" in x:amount.append(x)df[amount]=df[amount].apply(pd.to_numeric)

最后输出

输出结果如图

欢迎各位批评指正。

python 将dataframe中的str都转化成float_【Python自学笔记】一次不太成功的利用Python整理的利润表实践...相关推荐

  1. Python的DataFrame中筛选满足某列的值在指定数值内的行

    Python的DataFrame中筛选满足某列的值在指定数值内的行 以dataframe对象df1为例,选取所有满足A列的值在[1,2,3,4]的行. 语法为df1[ df1['A'].isin([1 ...

  2. python pandas dataframe 行列选择,切片操作 原创 2017年02月15日 21:43:18 标签: python 30760 python pandas dataframe

    python pandas dataframe 行列选择,切片操作 原创 2017年02月15日 21:43:18 标签: python / 30760 编辑 删除 python pandas dat ...

  3. Python向DataFrame中指定位置添加一列或多列

    对于这个问题,相信很多人都会很困惑,本篇文章将会给大家介绍一种非常简单的方式向DataFrame中任意指定的位置添加一列. 在此之前或许有不少读者已经了解了最普通的添加一列的方式,如下: import ...

  4. python explode_pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...

  5. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第01章 语言处理与Python

    第01章 语言处理与Python 1.1 语言计算:文本和单词 Python入门 NLTK 入门 搜索文本 计数词汇 1.2 近观Python:将文本当做词链表 链表(list,也叫列表) 索引列表 ...

  6. python遍历dataframe中的每个字符_pandas中遍历dataframe的每一个元素的实现

    假如有一个需求场景需要遍历一个csv或excel中的每一个元素,判断这个元素是否含有某个关键字 那么可以用python的pandas库来实现. 方法一: pandas的dataframe有一个很好用的 ...

  7. python从DataFrame中删除列

    目录 在操作数据的时候, DataFrame 对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注. 首先,一般被认为是"正确"的方法,是使用 Dat ...

  8. python dataframe列数值相加,python合并dataframe中的行并将值相加

    我想这会有帮助.这段代码可以处理任意数量的连续"T",甚至可以更改要组合的字符.我在代码中添加了注释来解释它的作用.在import pandas as pd def combine ...

  9. 【Python】Python3中的str和bytes

    参考文章:Python 3的bytes/str之别 len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数 >>> len('ABC') 3 >& ...

最新文章

  1. R计算混淆矩阵(Confusion Matrix)
  2. 模仿人脑视觉处理,助力神经网络应对对抗性样本
  3. 通过iTextSharp为PDF添加带有超链接的Bookmark
  4. 【MFC】MFC应用程序框架详解
  5. 我的Java自定义线程池执行器
  6. validation 参数校验和统一异常处理
  7. Adobe illustrator 批量变换同时选中的单个对象 - 连载 12
  8. php 字符串中文截取,PHP 截取中文字符串(支持多种编码)
  9. ucos实时操作系统应用开发流程
  10. Mac OS 文件、文件夹重命名的方法
  11. SQL Server 2016 开发版安装
  12. iredmail mysql_centos 7搭建邮件服务器iRedMail
  13. 什么是Instagram直播购物?如何设置Instagram 直播购物?
  14. 秀一波酷炫可视化大屏!
  15. 【工业智能】用AI来做工业设备的故障诊断,目前还停留在“鸡尾酒疗法”阶段
  16. Tomcat : 修改Tomcat端口号
  17. java 日期相差月数_Java 计算两个日期之间相差的月数
  18. 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
  19. 文件夹.EXE病毒清理
  20. 迅捷转换器转换效果鉴赏

热门文章

  1. 揭开AI产品PRD的面纱,浅谈其和互联网产品PRD的异同
  2. 如何做好新一年的产品规划?
  3. PMCAFF微课堂 | 前YY产品总监深度揭秘P2P运营推广精髓
  4. 不要把游戏当游戏,要把游戏当明星
  5. spark常用函数比较
  6. 【持续..】WEB前端面试知识梳理 - CSS部分
  7. linux 下安装nginx
  8. 笔记本自开wifi设置
  9. TP框架中内置查询IP函数
  10. maile:教你程序员怎么发邮件