pandas
一、创建series
1.头文件
import pandas as pd
import numpy as np
2.创建series、自定义索引
t1=pd.Series(np.arange(10))
t2=pd.Series([1,23,2,2,1],index=list("a,b,c,d,e")) #index索引
print(t1)
3.字典创建series
a={string.ascii_uppercase[i]: i for i in range(10)}#字典推导式创建一个字典
t5={"age":"30","name":"yang","job":"teacher"}
t4=pd.Series(a,index=list(string.ascii_uppercase[5:15]),dtype=float) #index索引 dtype数字类型
t6=pd.Series(t5)
print(a)#字典
t3=pd.Series(a)
print(t3)
print(t4)
print(t5)
print(t6)
4.series的切片和索引
t6.index()
t5={"age":"30","name":"yang","job":"teacher"}
t6=pd.Series(t5)
print(t6)
print(t6.index)
print(t6[1])
t6.values
print(t6.values) #numpy中的数组类型
print(type(t6.values))
series对象本质上由两个数组构成:
一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键->值
二、DateFrame和Series的关系
Series是一维的
DateFrame是二维的,DateFrame是Series的容器
对比:
1.Series
pd.Series(np.arange(12))
2.DateFrame:
t=pd.DateFrame(np.arange(12)).reshape(3,4)
print(t)
DateFrame对象既有行索引又有列索引
行索引:横向索引,叫index,0轴,axis=0
列索引:纵向索引:叫columns,1轴,axis=1
reindex
三、DateFrame属性
1.DateFrame的基础属性
代码 | 性质 |
---|---|
t.shape() | 行数,列数 |
t.dtype() | 列数据类型 |
t.ndim | 数据维度 |
t.index() | 行索引 |
t.columns() | 列索引 |
t.reindex() | 根据新索引进行重排 |
t.values() | 对象值,二维ndarry数组 |
t.drop() | 删除了指定值 |
t.loc() | 轴标签索引 |
t.iloc() | 整数索引 |
index的方法和属性:
reindex函数的参数:
2.DateFrame的整体情况查询
- 显示头几行:默认五行
print(t.head()) - 显示最后几行:默认五行
print(t.tail()) - 显示指定的行数列数:
t[ : ] #方括号写数组,表示取行,对行进行操作
#方括号写字符串,表示的去列索引,对列进行操作 - 展示相关信息:行数,列数,列索引,列非空值个数,列类型,内存占用
print(info()) - 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
print(describe())
四、padas读取外部数据
导入相关数据:
t.read_csv("./")
DateFrame中按照某一列排序的方法:
t.sort_values(by=" (要排序的名称) “,ascending=True/False) #True代表升序,False代表降序
DateFrame按照行列取数据:
t.loc[” “,” "] #逗号前行,逗号后列.
- 单独取某一行或者某一列,,如:[“A”,:]取A行,[:,“Y”]取Y列
- 取多行或者多列:t.loc[[“A”,“B”],:],直接取很多行:t.loc[[“A”:“D”,[“a”,“b”]]],取A到D行,取a到b列
取AB两行,t.loc[:,[“a”,“b”]]取ab两列 - 通过位置数取:t.iloc[1,2] 取一行二列 (取法规则同上)
五、布尔索引
取次数在某个范围内的结果:
print(t[t[“a”]>10])
print(t[(t[“a”]>10)&(t[“b”]<20)]) #&为且,|为或(与C语言稍有差别)
六、缺失数据索引
1.判断数据是否为NAN:
pd.isnull() #判断缺失数据 数据为NAN的地方显示TRUE,有数据的地方为FALSE
pd.notnull() #数据为NAN的地方显示FALSE,有数据的地方为TRUE
2.处理方法:
(1)删除NaN所在的行列:
t.dropna(axis= ,how=“ ”) #how指在什么情况下删除NaN,any代表在有NaN存在,这一行就删除,all代表只有这一行全为NaN才删除这一行
(2)填充数据:
t.fillna(0) #将NaN部分填充为0
t.fillna(t.mean()) #将NaN部分填充为该部分均值(t.mean()为t的均值)
3.处理为0的数据:
t[t==0]=np.nan
七、pandas常用统计方法
求人数:
print(len(set(t[“diretor”].tolist())))
print(len(t[“diretor”].unique())) #pandas中的方法
八、算术运算
pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。
例子:
s1=pd.Series([7.2,-2.5,3.4,1.5],index=['a','c','d','e'])
s2=pd.Series([-2.1, 3.6, -1.5, 4, 3.1],index=['a', 'c', 'e', 'f', 'g'])
print(s1)
print(s2)
print(s1+s2)
自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播。
Series和DataFrame的算术方法。它们每个都有一个副本,以字母r开头,它会翻转参数。因此这两个语句是等价的:
九、排序和排名
- 根据条件对数据集排序。
要对行或列索引进行排序(按字典顺序),可使用sort_index方法,它将返回一个已排序的新对象:
t.sort_index()
对于DataFrame,则可以根据任意一个轴上的索引进行排序:
t.sort_index(axis= )
数据默认是按升序排序的,但也可以降序:
ascending=False
当排序一个DataFrame时,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给sort_values的by选项即可达到该目的:
t = pd.DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})
t.sort_values(by='b')
- 若要按值对Series进行排序,可使用其sort_values方法,在排序时,任何缺失值默认都会被放到Series的末尾。
- Series和DataFrame的rank方法:
默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的,也可以根据值在原数据中出现的顺序给出排名:t.rank(menthod=‘first’)