Python

python数据分析&文件夹操作实战(二) 批量读取和输出exc

2019-12-25  本文已影响0人  黄金与犀牛角

此篇起皆为实战总结,以代码+注释+相关总结为主,基础语法请自行学习,注意各种数据类型间的不同就好。

任务目标:

给定一年中每个月每一笔订单的详细信息(csv),需要输出每个月的客户名称、业务类型、收入、成本并计算毛利(excel)

目标拆解:

获取文件夹下所有csv文件的文件路径,依照文件路径读取csv文件,摘取特定字段并做简单计算,输出excel

用到的库:

os,sys,numpy,pandas,csv,xlwt

代码详情:

拆解代码:

首先是导入所需要的库,需要什么导入什么即可;

第二部分是通过walk()函数遍历文件夹并搜寻相关文件,将文件名输入到列表里;

在此其中有些知识补充如下:

for root,dirs,names in os.walk(path):

#root返回根目录,dirs返回路径,names返回文件名,有dirs在可以保证遍历每个子文件夹

        for filename in names:

            if os.path.splitext(filename)[1] == '.csv':

            #此项将文件名拆成了前后两个部分,由于python的索引从0开始,截断文件名后,索引为0的部分是名称,1的部分是扩展名;

            #扩展名由最后一个“.”后决定,在此之前的都是文件名,“123.456.csv.xlsx”的扩展名是“.xlsx”

                doc = os.path.join(root,filename)

                #doc是含文件路径和文件名在的绝对路径,filename只是文件名

                print(doc)

                csvlist.append(doc)

第三部分是调用函数读取文件路径

第四部分是通过for循环实现依次读取批量操作

for doc in csvlist:

    df = pd.read_csv(doc,encoding = "gbk")

    #函数详情见pandas官方说明文档,主要编码格式有utf-8、gbk、gb2312等,可以在此指定读取的列的数据类型

    df[["月份","客户名称","业务类型","收入不含税","成本"]]

    #摘取特定列,可以通过df[["客户"]=="a"][["收入"]]等形式同时做行列筛选

    df["毛利"] = df.apply(lambda df:df["收入不含税"]-df["成本"],axis=1)

    #添加新列,使用apply函数进行即时运算赋值,axis=1表示列间计算,axis=0为行计算

    excel_name = os.path.splitext(doc)[0] + "-整理后.xlsx"

    #规定输出的文件路径和名称,偷懒所以以原文件所在的路径、修改文件名输出

    columns = {"月份","业务类型","客户名称","收入不含税","成本","毛利"}

    #指定输出的列及其顺序

    df.to_excel(excel_writer = excel_name,sheet_name = "sheet1",index = False,columns=columns)

以上,其余总结等后续补充。

博客同作者,https://blog.csdn.net/z1272578750/article/details/103697863,不定期更新。

上一篇 下一篇

猜你喜欢

热点阅读