Pandas 的使用
安装
pip3 install pandas
导入
import pandas as pd # 约定俗成 起别名为 pd
Series
第一种: pd.Series([4,5,6,7,8]) 执行结果: 0 4 1 5 2 6 3 7 4 8 dtype: int64 # 将数组索引以及数组的值打印出来,索引在左,值在右,由于没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引,
# 取值的时候可以通过索引取值,跟之前学过的数组和列表一样 ----------------------------------------------- 第二种: pd.Series([4,5,6,7,8],index=['a','b','c','d','e']) 执行结果: a 4 b 5 c 6 d 7 e 8 dtype: int64 # 自定义索引,index是一个索引列表,里面包含的是字符串,依然可以通过默认索引取值。 ----------------------------------------------- 第三种: pd.Series({"a":1,"b":2}) 执行结果: a 1 b 2 dtype: int64 # 指定索引 ----------------------------------------------- 第四种: pd.Series(0,index=['a','b','c']) 执行结果: a 0 b 0 c 0 dtype: int64 # 创建一个值都是0的数组 -----------------------------------------------
数据缺失
dropna():过滤掉值为NaN的行 参数 inplace=True:设置后再打印原本数据则为真的去掉了
fillna():
isnull():
notnull():
特性
1:从 ndarray 创建Series ---> Series(arr) ---> 常用
2:与标量(数字)运算 ---> sr * 2
3:两个 Series 运算
4:通用函数 ---> np.abs(sr)
5:布尔值过滤 ---> sr[sr>0]
6:统计函数 ---> mean()、sum()、cumsum()...
7:从字典创建 Series ---> Series(dic)
8:in 运算 ---> 'a' in sr 、 for a in sr....
9: 键索引 ---> sr['a'] 和 sr[['a', 'b', 'c']] 花式索引
10:键切片 ---> sr['a':'c']
11:其他函数 ---> 如:get()等
......
整数索引
loc:标签索引(index)竖向
iloc:下标索引(value)横向
Series 数据对齐
pandas 在运算时候,会按照索引进行对齐然后计算。如果存在不同的索引,则结果的索引是两个操作索引的并集
---------------------------------------------------------------------------- sr1 = pd.Series([12,23,34], index=['c','a','d']) sr2 = pd.Series([11,20,10], index=['d','c','a',]) sr1 + sr2 # 运行结果: a 33 c 32 d 45 dtype: int64 # 可以通过这种索引对齐直接将两个Series对象进行运算 ---------------------------------------------------------------------------- sr3 = pd.Series([11,20,10,14], index=['d','c','a','b']) sr1 + sr3 # 运行结果: a 33.0 b NaN c 32.0 d 45.0 dtype: float64 # sr1 和 sr3的索引不一致,所以最终运行会发现b索引对应的值无法运算,就返回了NaN,一个缺失值 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- # 将缺失值设为0(fill_value参数),所以最后算出来b索引对应的结果为14 # 此外,还可以使用 sub/div/mul等方法 sr1 = pd.Series([12,23,34], index=['c','a','d']) sr3 = pd.Series([11,20,10,14], index=['d','c','a','b']) sr1.add(sr3, fill_value=0) 运行结果: a 33.0 b 14.0 c 32.0 d 45.0 dtype: float64 ----------------------------------------------------------------------------
DateFrame
是一个 表格型的数据结构,相当于是一个二维数组,包含一组有序的列(索引)
也可以被当做是由 Series 组成的字典, 并且公用一个字典
创建:
第一种: pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]}) # 产生的 DataFrame 会自动为 Series 分配索引,并且列会按照排序的顺序排列 运行结果: one two 0 1 4 1 2 3 2 3 2 3 4 1 > 指定列 可以通过 columns 参数指定顺序排列 data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]}) pd.DataFrame(data,columns=['one','two']) # 打印结果会按照columns参数指定顺序 ---------------------------------------------------------------------------- 第二种: pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])}) 运行结果: one two a 1 2 b 2 1 c 3 3
常用属性和方法
index:获取行索引
columns:获取列索引
T:转置
values:获取值
describe:获取快速统计信息(个数、平均值、标准差、最大最小值等)
索引
同样有行索引和列索引,可以使用标签(index)和位置(value)两种方法进行索引和切片
切片
方法一:两个中括号 ---> 先取列再取行
方法二:(推荐)使用 loc / iloc 属性 ---> 一个中括号,逗号隔开,先取行再取列
loc :index
iloc:value
时间对象
详见:https://www.cnblogs.com/xiaoyuanqujing/articles/11646477.html
数据的分组和聚合
分组关键字:groupby
集合函数:size()、mean()、sum()、first()、last()等
sort_values(ascending=True) 根据值排序,ascending=True则代表升序,False代表降序
sort_index(ascending=True) 根据索引排序
小例子:
# 分析欧洲杯和欧洲冠军联赛决赛名单 import pandas as pd url="https://en.wikipedia.org/wiki/List_of_European_Cup_and_UEFA_Champions_League_finals" eu_champions=pd.read_html(url) # 获取数据 a1 = eu_champions[2] # 取出决赛名单 a1.columns = a1.loc[0] # 使用第一行的数据替换默认的横向索引 a1.drop(0,inplace=True) # 将第一行的数据删除 a1.drop('#',axis=1,inplace=True) # 将以#为列名的那一列删除 a1.columns=['Season', 'Nation', 'Winners', 'Score', 'Runners_up', 'Runners_up_Nation', 'Venue','Attendance'] # 设置列名 a1.tail() # 查看后五行数据 a1.drop([64,65],inplace=True) # 删除其中的缺失行以及无用行 a1 # 查看a1
补充:
read_文件类型(位置) ---> 读取文件数据
read_html(url) --->
to_文件类型(位置) ---> 保存数据,可以指定参数 index=False 这样可以不保存自动生成的 index