pandas处理excel表格的工作流

最近师傅让我帮他整理下excel表格,我就自认为很简单的答应了,没想到是自己给自己挖了一个坑,哈哈。遇到了好多问题,因此,写一篇文章记录下。
其实,仔细分析,这个工作流无非就是
在这里插入图片描述
当然讲起来容易,中间也涉及到了一些具体的问题

pandas 读取excel

这里我接触了两种方法:

  1. 使用pandas.read_excel(“123.xlsx”)方法
    这个方法返回一个DataFrame对象 ,对于有多个工作表的文件 ,会默认读取工作表1,也可以同过索引,来获得第几个表的数据,默认为0。

    df= pd.read_excel("123.xlsx",sheet_name=1)
    

    然后,我们处理数据一般都是按行处理的,所以我们可以将数据按行输出

    for index,values in df.iterrows():
    	print(index,values)
    

    并且values 是一个Series对象,可以使用键名读取数据,很方便。

  2. filepandas.ExcelFile(“123.xlsx”)
    这个方法会返回一个ExcelFile 对象,这个方法适合一个文件中有好几个表格,然后我们可以按表格读取,做表格数据的合并。
    我们可以通过sheet_names,获取一个列表,然后分列表的读取数据。

    for sheet_name in file.sheet_names:
        df_list.append(file.parse(sheet_name))
    #通过这种方法,创建一个dataframe的list
    

    对于DataFrame的操作,就可以像方法1那样,按行遍历了。

pandas 进行操作

这次的业务逻辑是,如果一篇文章的作者在一个花名册中存在,那么就保存这条文章记录,反之删除这条记录。但是数据集中有一些问题 ,比如有的名字中间有空格如

"李  明"

我们可以使用如下命令将空格除去:

cdf.fillna("null")# 填充空值
cdf.replace('\s+','',regex=True,inplace=True)#将两个字的名字 之间的空格去掉 

同时手机号码会默认变成科学计数法的形式如:

手机号 1.865167e+10 

这是因为我们默认数字使用浮点型存储,所以会出现如下形式,我们可以将浮点型的格式设置为不显示小数,使用如下命令

pd.set_option('display.float_format', lambda x: '%.0f' % x)

这涉及到的内容有将一条记录存入列表中,其他并没有什么难度,其代码逻辑如下:

new_excel=[]
for index,values in df.iterrows():
    if values["成果来源"]=="合著" or values["作 者"] in name_list:#
        new_excel.append(values)
pandas 导出excel

有了上述的new_excel列表,我们可以将其转化为一个DataFrame对象,然后导出到excel。和输出一样,如果是单个表,我们可以使用to_excel 去输出

df1.to_excel('e:/working_file/data.xlsx',sheet_name='sheet1')

对于有多个数据表,要输出到一个文件,可以使用`

save_path = 'e:/working_file/data.xlsx'
writer = pd.ExcelWriter(save_path)
df1.to_excel(writer,sheet_name='sheet1')
df2.to_excel(writer,sheet_name='sheet2')
writer.save()
#这就是将多个dataframe写入到一个文件的方法了。

但是输出结束后,你打开看看,会发现手机号那里还是科学计数法表示的,同时前面还多了序列,这时候就需要两个属性了,index=Falsefloat_format="%.0f" 0表示小数点后0位。
修改后代码如下

df.to_excel("'e:/working_file/data.xlsx'",index=False,float_format="%.0f")

以上就是pandas处理excel表格的工作流,有不足的后期补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值