本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 主要内容:Excel 办公自动化和数据分析
- 适用人群:办公室职员 / Python 初学者 / 有志从事数据分析工作的人员
- 准备内容:Anaconda-Spyder,Pandas库
学习Python,我们一定要了解Pandas这个数据分析库,生态完整、功能强大。很多人将其称为编程界的Excel,但Ofter认为这种称呼太学术了,而忽略了编程的目的。我们已经有了Excel,再用Pandas应该是对Excel的补充和提升,无法用Excel快速解决的问题,我们用Pandas来提高我们的办公效率。
虽然网上、书上已经有很多关于Pandas的教程,但是ofter抱着把Pandas讲得最完整、最简单和最实用的使命感,让大家真正掌握Pandas,并将其运用得炉火纯青。
1、Pandas的数据结构,即基础原理;(学习下会对后面的学习事半功倍)
2、Pandas的数据读取和生成;
3、Pandas的数据处理;(数据的清洗)
4、Pandas的数据可视化图表;
5、Pandas的项目实战。
1. 数据类型
在正式进入Pandas的内容之前,OF先给大家介绍下5个标准数据类型,因为后面所有的数据创建都会用到,有必要先了解下,如果已经熟悉了,我们就直接看 “2.数据结构” 的内容。
- Numbers(数字):如a=1, b=2.5,Python不需要像其他一些语言定义数字类型;
- String(字符串):如s="Officetouch"
- List(列表):常用(列表内容允许修改,有序的对象集合),用 [ ] 标识,如['Office', 't', 'o', 'u', 'c', 'h']
- Tuple(元组):不常用(元组内容不允许修改,有序的对象集合),用 () 标识,如('Office', 't', 'o', 'u', 'c', 'h')
- Dictionary(字典):常用(字典内容允许修改,无序的对象集合),由索引(key)和它对应的值value组成,用{ }标识,如{'code': 'OF', 'name': 'Officetouch'}
补充知识点:字符串、列表和元组的数据类型的索引知识,如下图:
(python的索引遵循左闭右开原则)
1) 我们先用代码验证下从左到右索引:
s="Officetouch"
print(s[1:3])
运行结果:
ff
大家可以看到右边索引3对应的字符“i”并未显示,这就是开的含义。
2) 我们再用代码验证下从右到左索引:
s="Officetouch"
print(s[-9:-1])
运行结果:
ficetouc
2. 数据结构 - Series
与Numpy数组不同,Pandas数组可存储非数值型数据,例如字符串。我们现在开始讲解Pandas 的主要数据结构: Series (一维数据)与 DataFrame(二维数据)。
Series:类似于一维数组,就是一列数据如[1, 'office', 'touch'],该函数有5个参数。
pandas.Series(data,index,dtype,name,copy)
参数说明:
- data:一组数据(ndarray 类型),必填。
- index:数据索引标签,如果不指定,默认从 0 开始,非必填。
- dtype:数据类型,默认会自己判断,非必填。
- name:设置名称,非必填。
- copy:拷贝数据,默认为 False,非必填。
创建Series有两种方式:1)列表;2)字典。(没错,就是第2部分介绍的)
方式1)列表:
import pandas as pd
t2 = pd.Series([1, 'office', 'touch', 2], index=list('ABCD'), name="OF")
print(t2)
运行结果:
A 1
B office
C touch
D 2
Name: OF, dtype: object
方式2)字典:
import pandas as pd
t1 = pd.Series({"A":1,'B':'office','C':'touch','D':2},name='OF')
print(t1)
运行结果:
A 1
B office
C touch
D 2
Name: OF, dtype: object
3. 数据结构 - DataFrame
可能有些学员会问学这个数据类型->Series,好像工作生活上也没什么场景会用到这种吧。生活中的场景远比这些基础的内容复杂,以上的这些知识都是为了给生活中常用的二维数据DataFrame打基础。DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。
DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
- data:一组数据(ndarray,series, map, lists, dict 等类型),必填。
- index:索引值,或者可以称为行标签,非必填。
- columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) ,非必填。
- dtype:数据类型,非必填。
- copy:拷贝数据,默认为 False,非必填。
创建DataFrame的方式主要有3种:1)列表;2)字典;3)ndarray(n维数组)。
比如我们想建一个人员信息的表格,有3列分别为:工号,姓名,年龄。
方式1)列表: ['Office', 'touch']是列表,那么多行的列表集合就是将这些列表再[]起来
import pandas as pd
data1 = [['1001','张三',20],['1002','李四',22],['1003','赵武',21]]
col1 = ['工号','姓名','年龄']
df1 = pd.DataFrame(data=data1,columns=col1)
print(df1)
方式2)字典:
import pandas as pd
data2 = [{'工号': '1001', '姓名': '张三', '年龄':'20'},{'工号': '1002', '姓名': '李四', '年龄':'22'},{'工号': '1003', '姓名': '赵武', '年龄':'21'}]
df2 = pd.DataFrame(data2)
print (df2)
方式3)ndarray:
import pandas as pd
data3 = {'工号':['1001', '1002', '1003'], '姓名':['张三', '李四', '赵武'], '年龄':['20', '22', '21']}
df3 = pd.DataFrame(data3)
print (df3)
3种方式的运行结果:
工号 姓名 年龄
0 1001 张三 20
1 1002 李四 22
2 1003 赵武 21
相信很多学员经常看到loc这个属性,那么OF今天也和大家介绍下loc的用法,Pandas 可以使用 loc 属性返回指定行的数据:
import pandas as pd
data1 = [['1001','张三',20],['1002','李四',22],['1003','赵武',21]]
col1 = ['工号','姓名','年龄']
df1 = pd.DataFrame(data=data1,columns=col1)
print(df1.loc[1]) #返回第2行的数据
运行结果:返回结果其实就是一个 Series 数据
工号 1002
姓名 李四
年龄 22
Name: 1, dtype: object
也可以返回多行数据,使用 [[ ... ]] 格式, ... 为各行的索引,以逗号隔开:
import pandas as pd
data1 = [['1001','张三',20],['1002','李四',22],['1003','赵武',21]]
col1 = ['工号','姓名','年龄']
df1 = pd.DataFrame(data=data1,columns=col1)
print(df1.loc[[0,1,2]]) #返回第1,2,3行的数据,我们也可以这么写df1.loc[0:2]
运行结果:
工号 姓名 年龄
0 1001 张三 20
1 1002 李四 22
2 1003 赵武 21
4. 结 语
今天ofter所讲的内容挺重要的,只有基础越扎实,上层建筑才能建得更完美。下期我们会尽快更新如下内容,让大家能尽快感受到数据分析实战的乐趣。
2、Pandas的数据读取和生成;
3、Pandas的数据处理;(数据的清洗)
4、Pandas的数据可视化图表;
5、Pandas的项目实战。