-- 综述
numpy主要用于进行运算
dataframe更切合于业务逻辑
-- dataframe的常用的属性
属性 说明
shape Dataframe的形状
values DataFrame的值,numpy.ndarray
index 行索引
index.name 行索引的名字
columns 列索引
columns.name 列索引的名字
-- dataframe常规操作, dataframe的增删改查
访问, 修改: 航切片, 列索引, loc, iloc
增加一列: data['new] = pd.Serise(new) , merge, concat
增加一行: concat, dataframe.append(df2,ignore_index=True)
删: drop, drop_duplicates, dropna
改: iloc访问具体数据或者使用新的Series(dict),替换当前行.例d_index = list(df.columns)能将列索引转换为列表,再访问index
-- 级联 concat, 直接连接在一起, 空补NAN
级联参数
axis 轴向 0~1
join 级联方式 inner outer
join_axes [pd.Index([index1,index2....])] 指定索引为连接对象
ignore_index True\False 开启是否忽略索引
keys 设置级联后分区的名称
-- 合并 merge, 需要提供参考列
合并参数
on label,[label1,label2...] 设置合并参考列
left_on\right_on label分别设置左右两个表的合并参考列,一般用于不存在相同列标签的情况
left_index\right_index True,False 分别设置是否开启以左\右行索引作为合并参考列
how 指定合并方式 inner outer left right
suffiex [suffiex1,suffiex2] 设置没有参与合并的相同的列标签的后缀
合并参考列情况:
行上: 一对一, 一对多, 多对多
列上: 一列, 多列
-- pandas的cut() 为了便于分析,连续数据常常离散化或拆分为“面元”(bin)
pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
参数bins用于指定范围区间,
参数right用于指定那边是开区间,闭区间.
参数lable用于面元的名称
-- Series/DataFrame运算与ndarray运算的区别
ndarray有广播,通过重复已有值来计算
Series与DataFrame没有广播,如果对应index没有值,则记为NaN;或者使用add的fill_value来补缺失值
-- 删除重复元素
drop_duplicates()
dataframe.duplicates()
******************************
dataframe.drop 删除一行或一列
label 指定删除的行或列标签(也可以是列表)
axis 改变删除的方向
inplace=True
dataframe.drop_duplicates 删除重复元素
keep 'first','last',保留第一个或者最后一个
inplace=True
dataframe.dropna 删除空值
axis 轴向
how 'any','all',有一个就删除或者全部为nan才删除
inplace=True
-- 映射
replace()函数
dataframe.rerplace({'替换前内容':'替换后的内容'})
map()函数
map不接受可迭代函数, 例如sum()
map是Series的函数, 不是dataframe的函数
map()的函数的参数可以是 字典, lambda function
rename()函数
dataframe.rename({'替换前索引':'替换后的索引'})
apply()函数
apply将函数应用到由各列或行所形成的一维数组上。维度是整个一行或者整个一列.
apply(function, axis=0,)
-- dataframe的异常值检测和过滤
1.使用dataframe.describe()查看数据分布情况
2. 确定过滤条件 bool_list
3. 使用过滤条件筛选符合条件的数据
4. 获取符合条件的索引标签
5. 使用drop函数,通过索引标签把异常值删除
********************************
# 假设大于3*std的数据即为异常数据
condition = np.abs(data) > 3*data.std()
# 获取包含空值的行,相当于确认了满足条件的数据样本
drop_datas = data[condition.any(axis=1)]
# 获取符合条件的索引
drop_index = drop_datas.index
# 根据索引删除符合条件的数据
data.drop(drop_index,inplace=True)
-- dataframe排序
使用.take()函数排序
可以借助np.random.permutation()函数随机排序
随机抽样
当DataFrame规模足够大时,直接使用np.random.randint()函数,就配合take()函数实现随机抽样
-- dataframe的数据分类操作: groupby()函数
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
-- 创建多成索引
index = [('California',2000),('California',2010),
('New York',2000),('New York',2010),
('Texas',2000),('Texas',2010)]
Mindex = pd.MultiIndex.from_tuples(index)
Mindex = pd.MultiIndex.from_product([['California','New York','Texas'],[2000,2010]])
pop = DataFrame(populations,index=Mindex,columns = ['人口'])
pop
replace 替换值
rename 热换索引
map 映射一行或一列,通常是一列