栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas处理读取文件时以0开头的缺失问题 symbol 000001 被省略

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas处理读取文件时以0开头的缺失问题 symbol 000001 被省略

在读文件,平安银行的利润表.xlsx为例,symbol 是股票代码,源数据为:

直接用read_excel读取的数据为:

股票简称          object
股票代码           int64
字段            object
2021-03-31    object
2020-12-31    object
2020-09-30    object
2020-06-30    object
2020-03-31    object
dtype: object

    股票简称  股票代码                字段  ...   2020-09-30   2020-06-30  2020-03-31
0   平安银行     1            一、营业收入  ...  12719000.00   8468000.00  4178800.00
1   平安银行     1             利息净收入  ...   8956100.00   5936100.00  2976600.00
2   平安银行     1           其中:利息收入  ...  15868700.00  10483200.00  5207400.00
3   平安银行     1            减:利息支出  ...   6912600.00   4547100.00  2230800.00
4   平安银行     1         手续费及佣金净收入  ...   2543900.00   1739800.00   848100.00
5   平安银行     1       其中:手续费及佣金收入  ...   3078900.00   2068800.00  1073300.00
6   平安银行     1        减:手续费及佣金支出  ...    535000.00    329000.00   225200.00
7   平安银行     1              汇兑收益  ...     99300.00     50500.00    50300.00
8   平安银行     1             投资净收益  ...    936700.00    596300.00   275700.00
9   平安银行     1     其中:对联营公司的投资收益  ...           --           --          --
10  平安银行     1         公允价值变动净收益  ...    150200.00    121500.00    17600.00
11  平安银行     1            其他业务收入  ...     10800.00      7600.00     2400.00
12  平安银行     1            二、营业支出  ...   3659900.00   2398000.00  1216200.00
13  平安银行     1           营业税金及附加  ...    122900.00     82000.00    41200.00
14  平安银行     1           业务及管理费用  ...   3537000.00   2316000.00  1175000.00

股票代码,应该为000001, 在读的时候,pandas转成了int64,目前只找到下面两种解决方案。

解决方案一:全部转成字符串

对读取的文件,不管是什么类型的数据,全部转成object

import pandas as pd
filepath = "lr_000001.xlsx"  # 文件路径,字符串
sheet_name = 0  # sheet名, 整数
header = 0  # 行索引, 整数
index_col = 0  # 列索引,整数
frame = pd.read_excel(filepath, sheet_name=sheet_name, header=header, index_col=index_col,dtype=object)
print(frame.dtypes)
print(frame.columns)
print(frame)

输出结果为:

股票代码          object
字段            object
2021-03-31    object
2020-12-31    object
2020-09-30    object
2020-06-30    object
2020-03-31    object
dtype: object
Index(['股票代码', '字段', '2021-03-31', '2020-12-31', '2020-09-30', '2020-06-30',
       '2020-03-31'],
      dtype='object')
        股票代码                字段  ...   2020-06-30  2020-03-31
股票简称                            ...                         
平安银行  000001            一、营业收入  ...   8468000.00  4178800.00
平安银行  000001             利息净收入  ...   5936100.00  2976600.00
平安银行  000001           其中:利息收入  ...  10483200.00  5207400.00
平安银行  000001            减:利息支出  ...   4547100.00  2230800.00
平安银行  000001         手续费及佣金净收入  ...   1739800.00   848100.00
平安银行  000001       其中:手续费及佣金收入  ...   2068800.00  1073300.00
平安银行  000001        减:手续费及佣金支出  ...    329000.00   225200.00
平安银行  000001              汇兑收益  ...     50500.00    50300.00
平安银行  000001             投资净收益  ...    596300.00   275700.00
平安银行  000001     其中:对联营公司的投资收益  ...           --          --

这样的数据,如果要做数据分析,就必选先转数据类型,特别是datatime类型的数据

解决方案二:填充,但是这种填充,也会有问题,不确定要填充的位数,有些股票代码只有5位

pandas中使用的是apply填充 : 0>6d的意思是补成六位,用0补,>是向左补,

#  pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,
# 功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。
# 最后使用匿名函数格式化数据,就得到想要的结果
frame['股票代码'] =  frame['股票代码'].apply(lambda x:'{:0>6d}'.format(x))
print(frame)
        股票代码                字段  ...   2020-06-30  2020-03-31
股票简称                            ...                         
平安银行  000001            一、营业收入  ...   8468000.00  4178800.00
平安银行  000001             利息净收入  ...   5936100.00  2976600.00
平安银行  000001           其中:利息收入  ...  10483200.00  5207400.00
平安银行  000001            减:利息支出  ...   4547100.00  2230800.00
平安银行  000001         手续费及佣金净收入  ...   1739800.00   848100.00
平安银行  000001       其中:手续费及佣金收入  ...   2068800.00  1073300.00

还有一种是填充字符串的,使用 zfill()方法 :zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。在输出一些编号类型的数字时,往往需要前面补0,比如这样的数字:

serial_num = 15
 
serial_num  = str(serial_num).zfill(6)
 
print(serial_num )
 
输出结果:000015
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号