pandas数据分析:正传

一:前言

作为一个有着良好python基础的菜鸡,以前在下研究过很多python的第三方库,参加工作后,pandas就成了许多当中的唯一了。
这里写图片描述

这里写图片描述
幸好有python基础,因此在组长的调教之下,在下很快就掌握了工作中需要用到的pandas的所有方法。

pandas基于numpy,一次安装pandas需要安装好numpy,不过这里有一条捷径,那就是anaconda,这里必须先各位老铁安利一下anaconda,conda在手,天下我有!

万事俱备,咱们接下来进入正题,那些pandas常用的方法。

1.read_csv()

在下每天接触的数据普遍都是几百上千万的数据,而这些文件通常都是csv文件,文件大小几百兆到1GB不等,这么久以来,在下碰到过的最大的csv文件是8GB这里写图片描述
普通的电脑,根本打不开好么?
所以,pandas的价值就体现出来了。
话不多说,直接上代码

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.read_csv("douban.csv",encoding="utf-8",sep=",")

print(df)

运行结果
这里写图片描述
这个csv文件是我原来用爬虫,爬取的豆瓣top250图书,这里经过pandas,read_csv一处理后,其实就是一个dataframe对象。因此我们可以对它进行先sql那样的查询。
例如

select book_name,scroe from douban;
可以转换为
df2 = df[['book_name','score']]

结果
这里写图片描述

select book_name,scroe from douban where scroe>9;
可以转换为
df2 = df[['book_name','score']].query('score>9')

结果

这里写图片描述

这里有一篇文章是具体介绍将sql转换为pandas的,老铁们可以看看
https://www.cnblogs.com/en-heng/p/5630849.html

看完结果,咱们继续了解下read_csv的参数
上面的代码,咱们写了三个参数,
“douban.csv”, 文件名文件路径
encoding=”utf-8”, 以utf-8编码来读取
sep=”,” 文件分隔符为逗号。(有时候文件分隔符是制表符)
其实read_csv还有很多参数
例如,如果遇上了文件有错行需要加上error_bad_lines=False
如果遇上文件太大,则需要加上low_memory=False,以及chunksize=xxxxx来进行分块读取
基本上,在下工作使用read_csv()的时候,用上的参数就这么多了,如果老铁们想要深入研究可以参考官方文档,或者这一片文章https://www.cnblogs.com/datablog/p/6127000.html

2:to_csv()

讲完csv的读,接下来肯定要讲一讲csv的写咯
to_csv()其实就是将一个dataframe对象写入到一个csv文件中
简单粗暴,直接上代码,还是以刚才的代码为基础

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.read_csv("douban.csv",encoding="utf-8",sep=",")
#查询字段为'book_name','score'并且分数大于9
df2 = df[['book_name','score']].query('score>9')
'''
    将其写入到D盘如果文件,会自动创建
    index=False 不要pandas为我们自动创建的索引
    encoding    默认为utf-8
    sep         默认为逗号分隔符
    mode        写入方式,默认为w,可以选着a(追加)
'''
df2.to_csv("D:\douban2.csv",index=False,encoding="utf-8",
sep=",")

这里写图片描述
这里写图片描述

一个几百兆,甚至上G的csv文件,经过pandas的处理,可以缩小几倍,甚至几十倍,因此有了pandas,只要有点python基础都能够将其玩得转,但是你以为pandas就这点功能了么?
那你就太天真了!
看看官方文档
这里写图片描述
这还只是pandas的一个有关IO操作的部分,如果加上其它,可想而知,pandas有多么可怕
这里写图片描述

但是,别害怕,在下相信各位老铁能够征服panda

这里写图片描述

猜你喜欢

转载自blog.csdn.net/katyusha1/article/details/79342878