- 一. 删除重复元素
- 二. 映射
- 三. 数据分析
- 四. 异常值检测和过滤
- 五. 数据聚合
一. 删除重复元素
- duplicated(): 检测数据重复行,返回series,若为不是第一次出现则为 True ,否则为 False
- drop_duplicates() : 删除重复行
列名不能重复,否则报错;
df = pd.DataFrame(np.random.randint(0,2,size=(4,2)),
index=['张','李','王','张'],
columns=['js','python'])
print(df)
# js python
# 张 1 1
# 李 0 0
# 王 0 0
# 张 0 1
print(df.duplicated())
# 张 False
# 李 False
# 王 True
# 张 False
# dtype: bool
print(df.drop_duplicates())
# js python
# 张 1 1
# 李 0 0
# 张 0 1
print(df.drop_duplicates('js'))
# js python
# 张 1 1
# 李 0 0
二. 映射
1. replace():替换符合条件的值
参数:
- to_replace:{‘替换的原数据’:‘替换的目标数据’}
- value :替换的目标数据,多个数据替换为同一个时可采用
- inplace
- limit: 向前向后填充的最大限度
- regex: 正则表达
- method: ‘pad’, ‘ffill’, ‘bfill’, None 向前向后填充
df = pd.DataFrame(np.random.randint(0,2,size=(4,2)),
index=['张','李','王','张'],
columns=['js','python'])
print(df)
# js python
# 张 1 0
# 李 0 1
# 王 1 1
# 张 0 1
print(df.replace(to_replace=1,value=100))
# js python
# 张 100 0
# 李 0 100
# 王 100 100
# 张 0 100
print(df.replace({0:000,1:111}))
# js python
# 张 111 0
# 李 0 111
# 王 111 111
# 张 0 111
2. map():
map方法可以根据条件修改当前列,还可以映射新一列数据
map可以使用方法和lambda表达式,不能使用sum之类的函数
可以新建一列
df = pd.DataFrame(np.random.randint(0,2,size=(4,2)),
index=['张','李','王','张'],
columns=['js','python'])
print(df)
# js python
# 张 0 0
# 李 0 1
# 王 0 0
# 张 0 1
df['python'] = df['js'].map(lambda x:x+3)
print(df)
# js python
# 张 0 3
# 李 0 3
# 王 0 3
# 张 0 3
def judge(item):
if(item>=1):
return 'sucess'
else: return 'fail'
df['python'] = df['js'].map(judge)
print(df)
# js python
# 张 0 fail
# 李 0 fail
# 王 0 fail
# 张 0 fail
# 新增一列
df['c++'] = df['js'].map(lambda x:x+1)
print(df)
# js python c++
# 张 0 fail 1
# 李 0 fail 1
# 王 0 fail 1
# 张 0 fail 1
3. transform(): 与map类似,根据某种规则算法,进行批量修改
4. rename(): 替换索引
df = pd.DataFrame(np.random.randint(0,2,size=(4,2)),
index=['张','李','王','张'],
columns=['js','python'])
col = {'js':'c++'}
print(df.rename(columns=col))
# c++ python
# 张 1 1
# 李 1 0
# 王 1 0
# 张 1 1
三. 数据分析
descibe() 函数
包含计数,平均值,最大最小值,标准方差
df = pd.DataFrame(np.random.randint(0,100,size=(3,2)),
index=['张','李','王'],
columns=['js','python'])
print(df)
# js python
# 张 78 4
# 李 79 84
# 王 34 37
print(df.describe())
# js python
# count 3.000000 3.000000 ---计数
# mean 63.666667 41.666667 ---平均值
# std 25.696952 40.203648 ---标准方差
# min 34.000000 4.000000
# 25% 56.000000 20.500000
# 50% 78.000000 37.000000
# 75% 78.500000 60.500000
# max 79.000000 84.000000
print(df.max())
# js 34
# python 26
# dtype: int32
print(df.max().js)
# 34
四. 异常值检测和过滤
df = pd.DataFrame(np.random.randint(0,100,size=(3,2)),
index=['张','李','王'],
columns=['js','python'])
print(df)
js python
# 张 9 26
# 李 39 39
# 王 92 66
print(df.std(axis=1))
# 张 12.020815
# 李 0.000000
# 王 18.384776
# dtype: float64
df1 = np.abs(df)>df.std()*3
df2 = df1.any(axis = 1)
print(df2)
# 张 False
# 李 False
# 王 True
# dtype: bool
print(df[df2])
# js python
# 王 92 66
df1 = np.abs(df)>df.std()*3 此句为本例异常检测的标准(其值大于标准方差的3倍)
检测结果:’王‘ 的成绩异常
五. 数据聚合
DataFrame.groupby()
实例:
对 item 列进行分组,求取分组下各列的最大值
df = pd.DataFrame({'item':['apple','bananla','orange','apple','bananla'],
'price':[10,20,30,40,50],
'number':[30,20,10,5,0]})
print(df)
# item price number
# 0 apple 10 30
# 1 bananla 20 20
# 2 orange 30 10
# 3 apple 40 5
# 4 bananla 50 0
g = df.groupby('item')
print(g.max())
# price number
# item
# apple 40 30
# bananla 50 20
获取 item 分组下的 price 的平均值,返回为 series
print(g['price'].mean())
# item
# apple 25
# bananla 35
# orange 30
# Name: price, dtype: int64
将 price 的平均值 合并到原来的 dataframe中
price_mean = g['price'].mean()
price_mean = pd.DataFrame(price_mean)
price_mean.columns = ['price_mean']
print(pd.merge(df,price_mean,left_on='item',right_index=True))
# item price number price_mean
# 0 apple 10 30 25
# 3 apple 40 5 25
# 1 bananla 20 20 35
# 4 bananla 50 0 35
# 2 orange 30 10 30