pandas数据处理
文章目录
1、删除重复元素duplicated()
使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True(是重复的)
- 使用drop_duplicates()函数删除重复的行
- 使用duplicate()函数查看重复的行
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
data = [[100,100,100],[90,90,88],[100,100,100],[90,90,87],[100,100,100]]
columns = ['python','c++','java']
index = list('ABCDE')
df = DataFrame(data=data,index=index,columns=columns)
df
python | c++ | java | |
---|---|---|---|
A | 100 | 100 | 100 |
B | 90 | 90 | 88 |
C | 100 | 100 | 100 |
D | 90 | 90 | 87 |
E | 100 | 100 | 100 |
df.duplicated(keep="first") # 告诉我们 当前行是否重复
# 参数默认是 keep="first" 保留开始的 意思是如果发现很多重复的元素 第一个不算重复的 后面的才是 某一行重复 就返回True
结果为:
A False
B False
C True
D False
E True
dtype: bool
df.duplicated(keep="last") # keep last 如果遇到重复的元素 最后一个不算重复的 前面的才算重复 这一行重复了 就是True
结果为:
A True
B False
C True
D False
E False
dtype: bool
df.duplicated(keep=False) # 只要有和别人完全一样的 不管在开头还是结尾 都算重复 这一行如果是重复的就返回 True
结果为:
A True
B False
C True
D False
E True
dtype: bool
df.drop_duplicates() # {'first', 'last', False}, default 'first'
python | c++ | java | |
---|---|---|---|
A | 100 | 100 | 100 |
B | 90 | 90 | 88 |
D | 90 | 90 | 87 |
df.drop_duplicates(keep="last")
python | c++ | java | |
---|---|---|---|
B | 90 | 90 | 88 |
D | 90 | 90 | 87 |
E | 100 | 100 | 100 |
df.drop_duplicates(keep=False)
python | c++ | java | |
---|---|---|---|
B | 90 | 90 | 88 |
D | 90 | 90 | 87 |
2. 映射
映射的含义:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定
包含三种操作:
- replace()函数:替换元素
- 最重要:map()函数:新建一列
- rename()函数:替换索引
1) replace()函数:替换元素
使用replace()函数,对values进行替换操作
Series替换操作
- 单值替换
- 普通替换
- 字典替换(推荐)
- 多值替换
- 列表替换
- 字典替换(推荐)
s1 = Series(data = [100,'peppa',np.nan,'chengdu'])
s1
结果为:
0 100
1 peppa
2 NaN
3 chengdu
dtype: objec
单值替换 普通替换
s1.replace(to_replace="peppa",value="佩琪")
结果为:
0 100
1 佩琪
2 NaN
3 chengdu
dtype: object
单值替换 字典替换( )
s1.replace({"chengdu":"成都"})
结果为:
0 100
1 peppa
2 NaN
3 成都
dtype: object
多值替换 列表替换 s1.replace([要替换的值1,要替换的值2,…],[替换成什么1,替换成什么2,…])
s1.replace([100,np.nan],["满分","空值"])
结果为:
0 满分
1 peppa
2 空值
3 chengdu
dtype: object
多值替换 字典替换( { 要替换的值:替换成什么,要替换的值:替换成什么 } )
s1.replace({100:"满分","peppa":"佩琪"})
结果为:
0 满分
1 佩琪
2 NaN
3 chengdu
dtype: object
Series参数说明:
- method:对指定的值使用相邻的值填充
- limit:设定填充次数
s2 = Series(data=np.array([80,100,100,100,89,78]))
s2
结果为:
0 80
1 100
2 100
3 100
4 89
5 78
dtype: int32
如果指定value不好 还可以找值来填充
s2.replace(to_replace=100,method="bfill") # 从后面找值来替换当前值
结果为:
0 80
1 89
2 89
3 89
4 89
5 78
dtype: int32
s2.replace(to_replace=100,method="ffill") # 从前面找
结果为:
0 80
1 80
2 80
3 80
4 89
5 78
dtype: int32
s2.replace(to_replace=100,method="ffill",limit=1) # limit 指定是最多往前或者往后找几个, 如果找不到就不填充了 ,limit 默认是None不限制
结果为:
0 80
1 80
2 100
3 100
4 89
5 78
dtype: int32
DataFrame替换操作
-
单值替换
- 普通替换
- 按列指定单值替换{列标签:目标值}
-
多值替换
- 列表替换
- 单字典替换(推荐)
df = pd.read_excel("../data/data.xls",sheet_name=0)
df
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
A | 甲 | NaN | NaN | NaN | Beijing |
B | 乙 | 69.0 | 142.0 | 29 | Beijing |
C | 丙 | 111.0 | 7.0 | 2 | Beijing |
D | 丁 | 139.0 | 19.0 | 125 | shanghai |
E | 戊 | 12.0 | 66.0 | Beijing | shanghai |
普通的单值替换
df.replace(to_replace='Beijing',value='北京')
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
A | 甲 | NaN | NaN | NaN | 北京 |
B | <