数据取值与选择
Series数据选择方法
类比一维np数组和py字典
- 看作字典
import pandas as pddata = pd.Series([0.25,0.5,0.75,1],index=['a','b','c','d'])#或者data = pd.Series({'key1':value1,'key2':value2...})data['b']#显式索引'a' in data #类比字典表达式,检测键/索引和值data.keys() #类比字典,输出键list(data.items()) #类比输出字典data['e'] = 1.25 # 新增键扩展字典,增加新的索引值扩展# Series可变,Pandas 在底层已经为可能发生的内存布局和 数据复制自动决策
- 看作一维数组
data['a':'c'] # 显式索引作为切片,闭区间data[0:2] #隐式索引作为切片,左闭右开data[(data > 0.3) & (data < 0.8)] #掩码
- 索引器:loc iloc ix
# loc表示取值和切片都是显式的data.loc[1]data.loc[1:3]out:1 a 3 b# iloc表示取值和切片都是puthon形式(从0开始,左闭右开区间)的隐式索引data.iloc[1]data.iloc[1:3]out:3 b 5 c # ix:标准的python列表取值方式(主要用于DataFrame对象
DataFrame数据选择方法
- 看作字典
area = pd.Series({'California':423967,'Texas':695662,'New York':141297,'Florida':170312,'Illinois':149995})pop = pd.Series({'California':38332521,'Texas':26448193,'New York':19651127,'Florida':19552860,'Illinois':12882135})data = pd.DataFrame({'area':area,'pop':pop})#获取DataFrame的列data.area #属性形式#列名不是纯字符串或者列名与DataFrame方法同名时,不能用属性索引data['area'] #字典形式,注意引号#使用字典语法增加列data['density'] = data['pop'] / data['area']2. 看作二维数组
#输出值,按行查看数组数据data.values# 转置DataFrame多维数组data.T
转置多维数组
3. 索引器 与Series相同,用于处理np形式数据的方法都可用于索引器 4. 查看数据及属性data.dtypes #查看各列数据类型data.head(n) #查看前n行数据,不输入参数时默认前5行data.tail(n)#查看后n行数据,不输入参数时默认后5行data.index #查看行索引data.columns #查看列索引data.values #查看所有数值data.describe() #查看描述性统计,包括count mean min max std 25% 50% 75%#重置数据#使用iloc索引器可以像操作数组操作DataFrame#获取1-3行得0、2列数据,其中[0,2]部分参数不能使用切片data.iloc[0:3,[0,2]]data.iloc[0,0] = 1 #所选位置替换为1
pandas数值运算方法
- pandas对象使用numpy通用函数,结果为保留索引得pandas对象
- 通用函数:索引对齐(通过python内置的集合运算规则实现,任何缺失值默认都用NaN填充)
DataFrame索引对齐
rng = np.random.RandomState(42)A = pd.DataFrame(rng.randint(0,10,(2,2)),list='AB')#输出2x2矩阵B = pd.DataFrame(rng.randint(0,10,(3,3)),list='BCA')#输出3x3矩阵A+B#输出结果的索引会自动排序,缺失值默认用NaN填充fill = A.stack().mean()A.add(B,fill_value=fill)#用A中所有值的均值填充缺失值#计算均值需要用stack将二维数组压缩成一维数组
py运算符与pd方法映射关系
运算
A = rng.randint(10,size=(3,4))df = pd.DataFrame(A,columns=list'QPST')df - df.iloc[0]#默认按行计算df.subtract(df['R'],axis=0)#通过axis参数指定按列计算
处理缺失值
- 主要形式 null NaN NA
- 方法
- 通过一个覆盖全局的掩码表示缺失值
- 用一个标签值(sentinel value)表 示缺失值
- None
- None是py单体对象,只能用于py对象构成的数组('object'数组类型
- py中没有定义整数与None之间的算数运算
- NaN
- 种按照 IEEE 浮点 数标准设计、在任何系统中都兼容的特殊浮点数
- Nan会和所接触过的数据同化:无论和NaN进行何种操作,最终结果都是NaN
- nansum() nanmin()函数可以忽略缺失值的影响
- pandans把NaN和None看成是等价交换,自动将None转换为NaN;将没有标签值得数据类型自动转换成浮点数缺失值NA
- pandas对不同类型缺失值得转换规则
处理缺失值
- 发现缺失值
- data.isnull()#创建布尔类型掩码标签数组
- data.notnull()
- data[data.notnull()]#布尔类型掩码数组可以直接作为Series或DataFrame索引使用
- 剔除缺失值
- data.dropna()#Series中可以直接使用,DataFrame中无法单独剔除一个值,只能剔除缺失值所在的整行或者整列(没有指定时默认剔除行)
- 参数axis指定剔除行/列
- 参数how设置剔除行或者列缺失值的数量阈值
- 参数thresh设置行或列中非缺失值的最小数量
- 替换缺失值
- data.fillna(0) #用0填充缺失值
- mathod指定填充方式
- data.fillna(method='ffill')#前面没有值时,填充后依然为空
- data.fillna(method='bfill')#后面没有值时,填充后依然为空