16-Day04-pandas-III

pandas数据处理

1.删除重复元素

drop(labels, axis, index, columns) 删除行或列

drop(axis, how=‘any’) 删除空白值

drop_duplicates(keep=‘first’) 查询重复的行

注意:如果使用pd.concat(df1, df2, axis=1) 生成新的DataFrame中在columns列标签相同时,duplicated()和drop_duplicates()都会出现问题

删除行或列
- df.drop(labels, axis, index, columns, inplace=False)
  - label 是索引标签, 可以是行或列的索引标签
  - axis 0表示行, 1表示列
  - index 表示行索引标签的列表, 也可以是单行
  - columns 表示列索引标签的列表, 也可以是单列
  - inplace  True表示修改原表,False表示修改副本

2.pandas的映射操作

replace(to_replace, value)函数:替换元素

### 数值映射操作
- series.replace()
- df.replace()


#### 映射操作的分类
- 单值映射
- 多值映射
    - list
    - dict
- 填充映射
    - method
    - limit

Series替换操作

s2 = Series(['Disen', 20, None, '西安'])
s2.replace(to_replace='Disen', value='狄哥')
s2.replace(to_replace=[None], value='女')
注:None值必须要以 [ ] 指定    
   可以直接用np.nan
s2.replace(to_replace=[None, 'Disen'], value=['男', '战神'])
s2.replace(['刘备', 'Disen'], ['没有', '刘备的主公'])   -- 不存在的“刘备”,不做任何操作
s2.replace({'Disen': '狄森', 20: 30})		-- 单字典替换
s2[:3] = 'Disen'
s2.replace('Disen', method='bfill', limit=1)    -- 向前邻近填充1次

DataFrame替换操作

s3 = DataFrame(np.random.randint(1, 100, size=(5,5)), columns=tuple('ABCDE'))
s3.loc[0, 'D'] = 'disen'
s3.loc[1, 'B'] = 'disen'


s3.replace({'D': 'disen'}, '战神')     D为列名, 'disen'为列值, 替换成“战神”

map()函数:新建一列
map中返回的数据是一个具体值,不能迭代

# 映射新的一列数据
s['性别'] = s['甲'].map({
    'Disen': '男',
    'Jack': '女',
    'Judy': '女',
    'Mack': '男',
    'Rose': '女'
})
### map映射操作

> 以现有的列值根据计算或操作得出新的结果

- dict方式
- lambda方式
- 自定义函数方式

transform()与map()类似,但是 transform()中不能使用字典。

rename()标签重命名

- index  		替换索引
- columns       替换列索引
- level      指定多维索引的维度

例:

score2.rename({
    'H5': 'HTML',
    'JS': 'JavaScript',
}, inplace=False, axis=1)

3.异常值的检查和过滤


- df.describe()  每一列数据的分布情况
- df.std()  每一列的标准差
- df|s.any()     对每一列应用筛选条件

4.排列

使用.take(indices, axis)函数排列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNRiosq3-1570710108363)(C:\Users\qy\AppData\Roaming\Typora\typora-user-images\1570709510497.png)]

persons.take(indices=[0, 3, 2, 1], axis=1)      # 0 3 2 1 分别代表列索引
# 将行索引标签进行打乱
index = np.random.permutation(persons.index)
index

5.DataFrame的分组操作

  • df.groupby() 返回DataFrameGroupBy 对象
  • 单列分组
  • 多列分组
  • 扩展操作
    • df.set_index() 将列索引转成行索引
    • df.reset_index() 将行索引转成列索引
persons.groupby(by='入职时间')['薪资'].mean()

6. 高级数据聚合

可以使用pd.merge()函数 将聚合操作的计算结果添加到df的每一行

可以使用transform和apply实现相同功能

  • groupby()分组之后,通过transform或apply提供自定义函数实现更多的运算;
  • transform()或apply()可以使用 lambda表达式
  • transform()返回的对象调用 add_prefix(‘total_’)添加列标签的前辍
transform会自动列索引返回值, 不去重
apply会根据分组情况返回值, 去重
transform指定函数接收的参数是Series对象
apply指定函数接收的参数是DataFrame类型
  • transform()返回的对象调用 add_prefix(‘total_’)添加列标签的前辍
transform会自动列索引返回值, 不去重
apply会根据分组情况返回值, 去重
transform指定函数接收的参数是Series对象
apply指定函数接收的参数是DataFrame类型

你可能感兴趣的:(16-Day04-pandas-III)