pandas数据分析输出excel产生文本形式存储的百分比数据,如何处理?
关键词:
python、pandas、to_excel、文本形式存储的数据
需求描述:
我用 python pandas 写了数据统计与分析脚本,并把计算结果用 pandas 的 to_excel()
存入到 excel
表格提交给团队。但遇到一个问题:当我的老板和同事们打开 excel
文件时,发现百分比数值无法正常显示,提示为“文本形式存储的数据”。
想让此类百分比数值正常显示,我该怎么办呢?
解决思路:
1、必须从自己身上找解决方案。在工作中,当我们需要输出文档给团队查阅,必须自己为文档的质量负责,而非要求或期望我的老板和同事来处理。
2、立即生效、简单好用的笨办法。
手动打开excel文件,选中“文本形式存储的数据”的一列数据,点击“数据 - 分列” 在弹出的菜单中点击两次“下一次”,然后点击“完成”即可。每次操作只能选中一列数据,如果有多列数据,就要分别操作多次。没办法偷懒。
该方法看上去有点粗笨,但在紧急情况下,你能立即用,马上解决问题。
如果单个文件中此类“文本形式存储的数据”较多,或你需要频繁输出该类文件,那么当然更好的做法是:直接优化脚本,从根源上解决问题。
解决方案:
0、初始脚本
为了完成这篇学习笔记,我把此类情况的最小情境构建一些数据,写个小脚本,如下:
import pandas as pd
#构建一组数据
df = pd.DataFrame([['文章阅读量', 982000],
['查看原文访问详情页', 8912],
[ '翻到详情页底部', 4514],
[ '点击购买', 1207],
['支付成功', 124]],
columns=['action','count'])
# 根据数据计算绝对转化率、相对转化率
df['abs_rate'] = df['count']/df['count'].values[0]
df['opp_rate'] = (df['count'].shift(axis=0,periods=-1))/df['count']
df = df.fillna(0)
# 设置百分比数据的显示
df['abs_rate'] = df['abs_rate'].apply(lambda x:format(x, '.2%'))
df['opp_rate'] = df['opp_rate'].apply(lambda x:format(x, '.2%'))
df.to_excel('result.xlsx', index=False)
1、单个子表,改用 to_csv() 方法
如果只有一个表格,那么可不再使用 to_excel()
而是改用 to_csv()
。具体代码为:
df.to_csv('result.csv',encoding='utf_8_sig',sep=',',index=False)
里面的两个关键参数,解释一下:
encoding='utf_8_sig'
而不是默认的utf-8
是为了解决中文乱码问题;index=False
则是不写入 dataframe 数据类型的index
那列无意义数据。
但实际情况是,数据统计分析的输出,通常有多个子表构成,所以还是得用回 to_excel()
吖!
2、多个子表,束手无措,作出取舍
我搜了非常多网页,尚未找到直接解决问题的方法。在这种情况下,我只能从以下2个结果中二选一:
- 显示为百分数,打开 excel 表格时有异常提示:以文本形式存储的数据(即现状)
- 显示为小数,打开excel 表格时无异常提示
想要显示为小数,则直接注释掉脚本中的 2 句百分数格式设置语句即可。
#df['abs_rate'] = df['abs_rate'].apply(lambda x:format(x, '.2%'))
#df['opp_rate'] = df['opp_rate'].apply(lambda x:format(x, '.2%'))
真是不甘心吖!!希望有天能找到答案,更新本文!笔记先落笔至此吧!
btw,您有解决办法吗?当需要把dataframe数据输出到excel并有多个子表时,如何能让百分数正常显示,而无任何异常提示呢?
pandas数据分析输出excel产生文本形式存储的百分比数据,如何处理?的更多相关文章
- Office EXCEL如何批量把以文本形式存储的数字转换为数字
如果"以文本形式存储的数字"不多,则点击右边的感叹号,转换为数字即可.但是如果有几万个单元格就不能这样做了. 先把他旁边的一列填充为1(选中该列,然后按Ctrl+F查找,按列查 ...
- Response输出excel设置文本样式
在网上查了些Response导出excel然后设置样式的方法,发现没有一个可行的于是开始自己研究, 发现可以通过输出样式的方式进行配置,我要设置的是全文本格式在excel样式是这样的mso-numbe ...
- Python数据分析:pandas玩转Excel (二)
1 对Excel文件的操作 方法一: 使用xlrd库或者xlwt库进行对excel表格的操作读与写: 方法二: pandas库同样支持excel的读写操作:且更加简便. 2 pd.read_excel ...
- Datatable数据转换成excel导出时 数值类型在EXCEL中为文本形式 无法进行统计
功能背景 有地税上以及各企业的一个缴费情况的比对,基于两表进行匹配查看数据是否在合理范围内,对比对完成表进行数值导出. 2.问题描述 匹配和生成匹配结果导出已成功完成,但是在数值列导出后变成了文本形式 ...
- pandas神器操作excel表格大全(数据分析数据预处理)
使用pandas库操作excel,csv表格操作大全 关注公众号"轻松学编程"了解更多,文末有公众号二维码,可以扫码关注哦. 前言 准备三份csv表格做演示: 成绩表.csv su ...
- pyhton pandas数据分析基础入门(一文看懂pandas)
//2019.07.17 pyhton中pandas数据分析基础入门(一文看懂pandas), 教你迅速入门pandas数据分析模块(后面附有入门完整代码,可以直接拷贝运行,含有详细的代码注释,可以轻 ...
- pyhton中pandas数据分析模块快速入门(非常容易懂)
//2019.07.16python中pandas模块应用1.pandas是python进行数据分析的数据分析库,它提供了对于大量数据进行分析的函数库和各种方法,它的官网是http://pandas. ...
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
- 点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)
效果: 描述: 利用log4net组件进行错误日志的记录,log4net记录错误的方式我所了解的有4种,No.1 文本形式记录日志,No.2存储到数据库形式记录日志,No.3控制台控制显示日志,No. ...
随机推荐
- Linux下Docker以及portainer相关配置
一.安装使用Docer CE 本文以CentOS 7为例,安装docker CE版本,docker有两种版本,社区版本CE和企业版本EE,此处学习研究以CE版本为例, 两种安装方式可选:1.使用yum ...
- Jquery.form异步上传文件常见问题解决
Jquery.form常用方法我就不多说,主要说一下在使用过程中碰到的问题 1.提示 “xxxx” is not define 或者"xxx" is not a function ...
- (数据科学学习手札66)在ubuntu服务器上部署shiny
一.简介 shiny是R中专门用于开发轻量级web应用的框架,在本地写一个shiny应用并调用非常方便,但如果你希望你的shiny应用能够以远程的方式提供给更多人来使用,就需要将写好的shiny应用部 ...
- java学习中碰到的疑惑和解答(一)
今天写一个接口的时候发现,接口的方法不需要写修饰符,直接写数据类型加上方法名(参数)即可通过编译. import java.util.List; import com.bjm.pojo.Flower; ...
- python3学习--文件读写
这一篇我们来看文件读写操作. 打开和创建文件主要是open()函数: f = open('filename','r') # 读模式 f = open('filename','w') # 写模式 f = ...
- 为什么双重检查锁模式需要 volatile ?
双重检查锁定(Double check locked)模式经常会出现在一些框架源码中,目的是为了延迟初始化变量.这个模式还可以用来创建单例.下面来看一个 Spring 中双重检查锁定的例子. 这个例子 ...
- 结合suctf-upload labs-RougeMysql再学习
这篇主要记录一下这道题目的预期解法 做这道题首先要在自己的vps搭建一个rouge mysql,里面要填写需要读取客户端的文件名,即我们上传的phar文件路径 先搭一个rouge mysql测试看看: ...
- java线程池,工作窃取算法
前言 在上一篇<java线程池,阿里为什么不允许使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了单个线程, 代码如下: T ...
- python的魔术方法大全
在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”(魔术方法),例如类的初始化方法 __init__ ,Python中所有的魔术方法均在官方文档中有相应描述,这 ...
- spring security中@PreAuthorize注解的使用
添加依赖<!-- oauth --><dependency> <groupId>org.springframework.cloud</groupId> ...