-
pandas概念
- 开源的数据挖掘库 用于数据探索
- 封装matplotlib,numpy
- 三种结构 DataFrame 、multiIndex、Series
-
multiIndex
- 把dataframe进行整合
- df.index df.index.names
-
Series
- pd.Series(np.arange())
- pd.Series([],index=[])
- pd.Series({})
- 对象.index = [‘a’,‘b’,‘c’]
- 可以看作一维数组
-
通过类似字典标记的方式或属性的方式,可将DataFrame的列获取为一个Series 对象[‘列名’]
-
创建DataFrame,修改index和columns
- pd.DataFrame(ndarry,index= ,columns= )
-
创建日期
- pd.date_range()
- start – 开始日期
- end – 结束日期
- periods – 时间跨度 与end选其一即可
- freq – 统计时间方式
- pd.date_range()
-
行索引,叫index,axis=0
-
列索引,叫colums,axis=1
-
对象.head() 对象.tail()
-
索引
- **直接取值的时候 先列后行 **
- loc
- 先行后列 索引值
- 标签索引
- loc中能传入的只有布尔列表和索引子集构成的列表,
- 所有在loc中使用的切片全部包含右端点
- iloc
- 先行后列 索引值的下标
- 位置索引
- iloc 中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把values拿出来
- 切片不包含右端点
- Index对象是不可修改的 index = 对象.index index[1] = ‘d’ 错误
- Index的方法和属性
- diff 计算差集
- intersection 计算交集
- union计算并集
- delete 删除索引i处元素,得到新Index
- drop 删除传入的值,得到新index
- insert 元素插入索引i处元素,返回True
- 对象.reset_index(drop=False)
- 默认 drop=False 不删除原来索引
- drop = True 删除原来索引
- 对象.set_index(drop=True,keys=)
- 默认 drop=True 删除原来索引
- 如果索引是两个的时候就是multiIndex
- 对象.reindex(index=[],method=’’,colums=[]) 创建一个适应新索引的新对象
- method = ffill、pad 前向填充(搬运)值
- method = bfill、backfill 后向填充(搬运)值
- 修改行或列名
- df.rename(index={‘需要替换的值’:‘替换后的值’},columns={‘col1’:‘new_col1’})
-
赋值操作
- 对象.列名
- 对象[’’]
- 对象.drop([‘名称’],axis=) 删除列、行 默认axis=0
- 对象[ : 2]
- 对象.drop(index = ‘’,columns=’’)
-
排序
- 对象.sort_values(by=[列名,列名] , ascending = True)
- 对象.sort_index(ascending = True,axis=,by=)
- 默认升序
- 任何缺失值默认放到Series的末尾
-
算术运算
- 直接用方法 add(fill_value=0) 原来没有重叠的位置就会产生NA值 传入fill_value=0 现在会填充0
- sub() div() mul()
- 对象.query(’") 逻辑运算函数 参数:" 字段名 > 2 & 字段名 < 4 "
- 对象.isin([value])
-
统计运算
- 对象.describe()
- mode 众数 出现最多的数 知道即可
- median() 中位数 排序后取值(两数平均值)
- idxmax() 获取最大值的索引
- df.sum(axis=,skipna=,level=‘列名’) skipna排除缺失值,默认为True level在某条轴上求和
- var() 方差 std()标准差
- diff 计算一阶差分 对时间序列很有用
- corr() 相关系数
- cov() 协方差
- unique() 取唯一值数据
- value_counts() 统计出现的频率
- isin([])
- 累计求和
- cumsum 累计求和
- 添加新的列
- df1.assign(列名’=pd.Series(list(‘def’))) 不会对原DataFrame修改
- df1[‘列名’] = list(‘abc’)
- nlargest函数返回前几个大的元素值
-
自定义运算
- data[[‘字段名’]].apply(func,axis=0)
- func可以为匿名函数
- data[[‘b’]].apply(lambda x:x.max()-x.min(),axis = 0)
- del 对象.[‘列名’] 删除列
- 对象.apply(pd.value_counts).fill(0)
-
读取文件
- pd.read_csv(路径 , sep=’,’ , usecols = [需要的列] ,index_col=)
- 参数 names =[] 可为文件分配列名
- index_col 指定索引
- skiprows = [] 跳过文件的第x行
- nrow= 读取的行数
- pd.read_table() 默认分隔符为制表符\t
- pd.load()
- pd.to_csv(路径 , sep = ‘,’ , columns=[] ,header=True,index = True ,)
- sep 以什么为分割
- columns: 需要哪列 并按照你指定的顺序排列
- mode: 方式 ‘w’: 重写 ‘a’:追加
- index:是否写进索引 行标签
- header :列标签
- pd.read_hdf(路径, key = None, ** kwargs)
- pd.to_hdf(xxx.h5,key = )
- 读取h5文件
- pd.read_json(路径,orient=,type=,lines= )
- pd.to_json(路径,orient=)
- 一般 orient = ‘records’ 按照什么方式进行读取或者写入
- lines一般为True 是否按照行读取和写入
- import json
- json.load()把json转为python形式
- json.dumps() 把python对象转为json
- 推荐实用hdf
- 压缩方式为blose,速度快
- 压缩后提高利用率,节省空间
- 支持跨平台
- pd.read_csv(路径 , sep=’,’ , usecols = [需要的列] ,index_col=)
-
处理缺失值
- np.NaN的类型是float
- df.isnull() 判断是否有缺失值 np.any(pd.isnull()) 有返回True
- df.notnull() np.all(pd.notnull()) 有返回False
- 对象.dropna(axis=,how=,thresh=) 删除有NaN数据的一行 how=‘all’ 只丢弃全为NA的那些行
- df.fillna(value,inplace=True) 替换有NaN的数据
- value 替换的值
- inplace True修改原数据 False 不替换修改原数据,生成新对象
- df.fillna({‘a’:0.5,‘b’:-1}) columns 为a的填充为0.5 b的填充为-1
- df.fillna(method=‘ffll’) 前向填充值 与reindex有效的插值方法相同
- 对象[列名].fillna(value = 对象[列名].mean())
- 替换思路 把 ?替换为np.NaN
- 对象.repalce(to_replace=需要替换的值 ,value=替换后的值 )
-
数据离散化
- 把一些数据分到某个区间,最后用不同的符号或者数字表达
- pd.qcut(data,q=分组个数) 把数据大致分成数量相等的几类 qcut = pd.qcut(data,10) qcut.value_counts()
- 对象.value_counts() 数量统计
- pd.cut(data,bins=自定义分组) 指定分组间隔 自定义分组bins= [-7,-3,0,3,7]
- one-hot编码 把数据转为为0,1统计类型 别名:哑变量、热独编码
- pd.get_dummies(data,prefix=分组名称) 增加columns的前缀
- pd.interval_range(start=,periods=区间个数,freq=步长,end=)
-
数据合并
- pd.concat([data1,data2],axis = 1)
- pd.merge(left,right,how='inner’or ‘outer’,on=,left_on=,right_on=)
- 拼接方式 how = 'inner’or ‘outer’ or ‘left’ or ‘right’ 与sql一样
-
交叉表和透视表
- 交叉表 用于计算一列数据对于另一列数据的分组个数 (寻找两列之间关系)
- pd.crosstable(value1 , value2) 返回具体数量
- 透视表 DataFrame.pivot_table(values=[],index=[],columns=[]) * 把Index 转为 DatetimeIndex pd.to_datetime(data.index)
-
分组与聚合
- DataFrame.groupby(key, as_index = False)
- data.groupby([‘color’])没有意义 需要聚合
- data.groupby([‘color’])[‘size’].mean() 按颜色分组对大小取平均值
- data.groupby(‘userId’).agg([list]) 转为列表
- as_index = False 多加一个索引
-
层次化索引
- 在一个轴上有多个索引级别
- df.unstack()
- df.stack()
Pandas操作总结
最新推荐文章于 2022-09-09 15:31:11 发布