Pandas的基本指令使用
介绍
简介
Pandas是Python 的一个第三方数据分析包,最初被用作金融数据分析工具而开发出来,因此 Pandas 对时间序列分析提供了很好的支持。
Pandas是为了解决数据分析任务而开发的,纳入了大量的标准数据模型,提供了高效的操作大型数据集所需要的工具。
Pandas提供了大量的能够快速便捷地处理数据的函数和方法,包含了高级数据结构,以及让数据分析变得快速、简单的工具。
与NumPy区别
Series是一维数组。与NumPy的数组不同,数组中只允许存储相同类型的数据,而Series中可以存储不同类型的数据。
DataFrame是二维数组。它的列通过columns来索引,行通过index来索引,也就是说数据的位置是通过列和索引来确定的。非常接近EXCEL表格中的数据表。
使用
一维数组Series
创建一个一维数组。
import pandas as pd
a=pd.Series(["orange","apple","watermelon","banana"])
print(a)
输出结果:
0 orange
1 apple
2 watermelon
3 banana
dtype: object
可以查看数组的属性
import pandas as pd
a=pd.Series(["orange","apple","watermelon","banana"])
print(a.index)
print(a.values)
输出结果:
RangeIndex(start=0, stop=4, step=1)
['orange' 'apple' 'watermelon' 'banana']
Series默认创建的索引为整型,可以指定其他类型。然后按索引查找。
import pandas as pd
a=pd.Series(["orange","apple","watermelon","banana"],
index=["o","a","w","b"])
print(a["o"])
print(a["b"])
输出结果:
orange
banana
Series与NumPy的array比较类似。
二维数组DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列的数据类型都是相同的,不同的列之间数据类型可以不同。
与数据库相类比,DataFrame很像是一个数据库表。DataFrame中的每一行是一个记录,是名称为Index的一个元素,而每一列是一个字段,对应数据库表的一个属性。
与数据库表不同的是,DataFrame中面向行和面向列的操作基本上是平衡的。DataFrame既有行索引也有列索引,可以被看作是由 Series组成的字典(共用同一个索引)。事实上,DataFrame中的数据以一个或多个二维块的形式存放,而不是列表、字典或别的一维结构。
创建DataFrame
首先创建一个字典,再根据字典创建DataFrame
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian)
print(df)
输出结果:
name age degree
0 zhao 21 大专
1 qian 22 本科
2 sun 23 硕士
3 li 24 博士
注意左边自动加了一列索引,从0开始。
列表的顺序同时也可以修改
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
print(df)
输出结果:
degree name age
0 大专 zhao 21
1 本科 qian 22
2 硕士 sun 23
3 博士 li 24
创建索引
使用单独的索引列表
方法同Series一样
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,index=["Z","Q","S","L"])
print(df)
输出结果:
name age degree
Z zhao 21 大专
Q qian 22 本科
S sun 23 硕士
L li 24 博士
使用某一列数据做索引
可以直接调用某一列内容做索引,然后为了美观可以隐藏某一列。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,
index=zidian["name"],
columns=["degree","age"])
print(df)
输出结果:
degree age
zhao 大专 21
qian 本科 22
sun 硕士 23
li 博士 24
修改索引
直接修改索引值
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
df.index=[15,16,17,18]
print(df)
输出结果:
degree name age
15 大专 zhao 21
16 本科 qian 22
17 硕士 sun 23
18 博士 li 24
注意索引列表元素必须与DataFrame的元素数相等。
存取数据
取整列
类似字典标记的方式或属性的方式。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
print(df["age"])
print(df.degree)
输出结果:
0 21
1 22
2 23
3 24
Name: age, dtype: int64
0 大专
1 本科
2 硕士
3 博士
Name: degree, dtype: object
取整行
loc方法按键取行。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
print(df.loc[0])
输出结果:
degree 大专
name zhao
age 21
Name: 0, dtype: object
存取字段
可以通过确定列和行来查找和修改字段,注意行列的先后有区别。
先行后列df.[index][columns]
先列后行df[columns][index]
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
print(df.loc[0]["name"])
print(df["name"][0])
输出结果:
zhao
zhao
当然同时也可以修改一整列的值,注意为不存在的列赋值会生成新的一列。
赋值的元素数必须相等。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
df["age"]=[10,11,12,13]
print(df)
df["other"]=[0,0,0,0]
print(df)
输出结果:
degree name age
0 大专 zhao 10
1 本科 qian 11
2 硕士 sun 12
3 博士 li 13
degree name age other
0 大专 zhao 10 0
1 本科 qian 11 0
2 硕士 sun 12 0
3 博士 li 13 0
注意修改不能用先行后列的方式。
使用del语句可以删除列。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
del df["age"]
print(df)
输出结果:
degree name
0 大专 zhao
1 本科 qian
2 硕士 sun
3 博士 li
遍历
使用iterrows()按行遍历
可以将每一行迭代为(index,series)对
也可以直接将(index,series)拆封
index是行索引,row是行数据。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
#将每一行迭代为(index,series)对
for row in df.iterrows():
print(row[0],row[1],sep=':\n')
#也可以直接将(index,series)拆封
for index, row in df.iterrows():
print(index,row[0],row["age"])
print(df)
输出结果:
0:
degree 大专
name zhao
age 21
Name: 0, dtype: object
1:
degree 本科
name qian
age 22
Name: 1, dtype: object
2:
degree 硕士
name sun
age 23
Name: 2, dtype: object
3:
degree 博士
name li
age 24
Name: 3, dtype: object
#################分界线
0 大专 21
1 本科 22
2 硕士 23
3 博士 24
使用iterrows()按行遍历
将每一行迭代成元组,这种方法比iterrows效率高。
也可以在迭代时把其拆分,方便使用。
注意只能同过整数索引或者切片来获取,如果要使用row[“age”]则要使用gatattr()返回一个指向对象属性的值。
import pandas as pd
zidian={"name":["zhao","qian","sun","li"],
"age":[21,22,23,24],
"degree":["大专","本科","硕士","博士"]}
df=pd.DataFrame(zidian,columns=["degree","name","age"])
#将每一行迭代为元组
for row in df.itertuples():
print(row)
#也可以直接将其拆封
for row in df.itertuples():
print(row[0],row[1],row[2])
#使用getattr()
for row in df.itertuples():
print(getattr(row,"name"),getattr(row,"age"))
输出结果:
Pandas(Index=0, degree='大专', name='zhao', age=21)
Pandas(Index=1, degree='本科', name='qian', age=22)
Pandas(Index=2, degree='硕士', name='sun', age=23)
Pandas(Index=3, degree='博士', name='li', age=24)
#########
0 大专 zhao
1 本科 qian
2 硕士 sun
3 博士 li
#########
zhao 21
qian 22
sun 23
li 24