本章是csv文件处理的终章
重点在于对数据总值和均值的计算,虽为终章,但却并非结束,csv需要学习的东西还有很多
那么首先呢,我们学习这部分的时候,需要多个文件,博主会给你们提供一个下载的地址,大家可以在那里下载博主博客引用的所有文件
传送门
当然由于是外网github社区所以会比较慢,但是文件本身并没有特别大,所以小伙伴只需要等待片刻即可
三个文件:
利用基础python去处理
先上代码:
#基础Python 计算文件中值得的总值和均值
import csv
import glob
import os
input_path="E:\桌面\jupyter_lab"
out_file="the_first_csv.csv"
header_list=['file_name',"total_sales","average_sales"]
filewrite=open(out_file,"a+",newline="")
write_object=csv.writer(filewrite)
write_object.writerow(header_list)
for input_file in glob.glob(os.path.join(input_path,"sales_*")):#连接文件并实现遍历
with open(input_file,"r",newline="") as fileread:#打开文件
read_object=csv.reader(fileread)#创建读取对象
out_list=[]#out_list需要承受写入的内容每一次文件的遍历都会刷新,重新记录数据
out_list.append(os.path.basename(input_file))
head=next(read_object)
total_sales=0
number_of_sales=0
for row in read_object:
sales_amount=row[3]
total_sales+=float(str(sales_amount).strip('$').replace(",",""))
number_of_sales+=1
average_sales=("{0:2f}".format(total_sales/number_of_sales))
out_list.append(total_sales)
out_list.append(average_sales)
write_object.writerow(out_list)
filewrite.close()
那么很明显,我们可以看到这是一段相对而已比较长的代码块了
很多人会这里产生厌烦,我们需要做的是将他一步一步分解,详解,让每个小伙伴都可以看懂😄
在前文解释过的内容这里会选择性的忽略
- head_list使我们需要加入的一行标题行,用于标明文件名,总值以及均值
- 使用glob,os模块对文件进行遍历之后,我们在每一次的遍历之下进行操作
- 我们在每一次操作的时候都需要创造一个空的列表,这个列表也就是代码中的out_list这个列表用来承受每一次我们需要添加到数据,那么很显然me一次的文件遍历都会刷新这个列表
- out_list.append(os.path.basename(input_file))这句代码将改文件名加入列表out_list中也就是我们需要加入的第一列数据。
- head=next(read_object) 我们将第一行,也就是 标题行 先遍历掉(我们需要使用的是标题行下的数据所以需要过滤掉)
- 接着我们需要创建两个变量去承接我们需要给处理的数据也就是total _sales and number_of_sales,均值average_sales便是total_sales/number_of_sales
- 在每一个文件内容的遍历中我们使用**total_sales+=float(str(sales_amount).strip(’$’).replace(",",""))**这段代码来进行一系列转化。其实很容易看懂,大家多看看即可,这里不必详解
- ** average_sales=("{0:2f}".format(total_sales/number_of_sales))这段代码的format函数**的用法是格式化输出的一种,博主在这里可以给大家一些拓展。
拓展:
利用pandas处理该问题
代码:
#pandas 计算文件中值的总值和平均pandas提供了用来计算行和列数据的统计摘要函数
#这里使用 pandas.DataFrame().sum() and padnas
import pandas as pd
import os
import glob
input_path="E:\桌面\jupyter_lab"
out_file="the_first_csv.csv"
all_files=glob.glob(os.path.join(input_path,"sales_*"))
all_data_frames=[]
for input_file in all_files:
data_frame=pd.read_csv(input_file,index_col=None)
total_sales=pd.DataFrame([float(str(value).strip("$").replace(",","")) for value in data_frame.loc[:,'Sale Amount']]).sum()
average_sales=pd.DataFrame([float(str(value).strip("$").replace(",","")) for value in data_frame.loc[:,"Sale Amount"]]).mean()
data={'file_name':os.path.basename(input_file),"total_sales":total_sales,"average_sales":average_sales}
all_data_frames.append(pd.DataFrame(data,columns=["file_name","total_sales","average_sales"]))
data_frames_concat=pd.concat(all_data_frames,axis=0,ignore_index=True)
data_frames_concat.to_csv(out_file,mode="a+",index=False)#mode="a",就是追加的意思否则的话会覆盖
那么在代码的开头啊,博主也说了
pandas 计算文件中值的总值和平均pandas提供了用来计算行和列数据的统计摘要函数,这里使用 pandas.DataFrame().sum() and padnas 那么我们可以看到啊,其实pandas对于处理该问题并没有简化多少,而且里面很多函数是前文讲过的,不熟悉的小伙伴可以浏览一些一下博主以前的博客但对我们来说,画上个几分钟多会一个方法也并非是什么坏事,所以我也做一些简单的解说
重点在于:sum函数和mean函数的用法,那么他们用法的格式是这样的
**pandas.DateFrame(参量).sum()**注意啊,这里我们的参量是
:
[float(str(value).strip("$").replace(",","")) for value in data_frame.loc[:,‘Sale Amount’]] 那么很明显呢,这是一个列表生成器,生成了一个列表,并且里面用到了loc函数(前文讲过loc函数),其余的东西在代码中大概已经已经标注,也不算博主偷懒😄 这些东西我本人觉得还是需要大家去自己思考,自己发现一些问题,有助于理解,ok,今天就到这了吧