如何剪裁csv文件,并从中求出每一列的最大值和平均值,并将最大值和平均值添加到表的末尾

如何剪裁csv文件,并从中求出每一列的最大值和平均值,并将最大值和平均值添加到表的末尾


很少用python,第一次用python来处理csv文件,算是一个从无到有的过程吧,文中诸多地方可能有错,感谢指正!

剪裁CSV文件

因为收集到的数据属性多,量比较大,需要的属性只是其中的特定几个,而且数据行数也不需要这么多,所以使用了pandas的read_csv,因为数据表前几行是自动生成的一些备注行,直接读取会报错,所以需要跳过
大致代码如下:

# 按需求读取csv文件
"""
参数说明:
# csv_path是我需要被pandas读取的文件路径
# usecols是我需要的列,可以指定其具体名称,也可以以数组的形式指定,0即代表第一列
# skiprows是指需要跳过的行,注意这不是删除前几行,skip的行数超过属性行会导致读取报错
# encoding是指定文件的编码方式,防止读取出来的文件产生乱码
# index_col一共可以指定三个:None/0/False,详情请参照:https://blog.csdn.net/weixin_40992494/article/details/104535719
# nrows是需要读取的行数
"""

df = pd.read_csv(csv_path, usecols=[0,1,2,3], skiprows=2, encoding='utf8', 
					index_col=0, nrows=80)

读取到了之后并不会对原文件进行更改,最后要将更改的结果导出,我需要导出一个csv文件,故使用

df.to_csv('这里填需要导出的路径')

求每一列的最大值和平均值

其实一开始挺懵逼的,看起来很简单的东西,也走了一些弯路。。。
首先需要了解到,使用pandas求最大值和平均值需要使用的是df.max()和df.mean()。
在上面使用read()的时候我已经指定了index_col=0,即第一行是index,其本身是不会参与计算的(这正和我意)但是傻傻的使用了loc去规避第一行。。。
记录一下错误的方法
首先写了一个list指定了需要计算平均值和最大值的cols(其实就是除了第一列以外的。。)
然后使用了loc函数:

'''
round()是保留小数点后几位
'''
mean = df.loc[:, col_list].mean().round(2)
max = df.loc[:, col_list].max().round(2)

我认为正确的做法:

mean = df.mean().round(2)
max = df.max().round(2)

因为我取到的数据已经是我想要的列了,然后第一列也是不需要参与计算的index,所以就这样就能得到正确的结果了

将最大值和平均值添加到末尾

添加数据到dataframe,经过我在网上搜索最终决定用append(),但是在添加之前我们需要了解到刚才计算出的结果到底是什么格式,将上面得到的mean和max数据格式打印出来:
如何剪裁csv文件,并从中求出每一列的最大值和平均值,并将最大值和平均值添加到表的末尾
是series形式的数据,把两个结果拼好然后append进原表就好了。需要注意的是,得到的series是没有index的,所以需要为其添加一个name:

series_0 = pd.Series(max, name="最大值")
series_1 = pd.Series(mean, name="平均值")
# 合并
series = pd.concat([series_0, series_1], axis=1)

然后再使用append添加即可:

'''
T很关键,可以将series转置,不转置的话会导致插入错误,因为得到的数据格式将原本的col作为了index
'''
df = df.append(series.T)

最后记得to_csv()导出到文件
这部分知识是吃的快餐,理论上肯定有所纰漏,但结果是没错的,望指正!

上一篇:苹果发布watchOS 8,健康生活更进一步


下一篇:自己做量化交易软件(42)小白量化实战15--自编股票软件公式历史与聚宽量化平台仿大智慧指标回测设计