数据分析之数据处理

在这里插入图片描述
环境:python3.7

pip install numpy -i https://pypi.douban.com/simple
pip install pandas -i https://pypi.douban.com/simple

一、删除重复的行

1.1
查询重复的行:duplicated()
删除重复的行:drop_duplicates()

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

# 数据框生成函数
def make_df(index,columns):
    data = {k:[k+str(i) for i in index] for k in columns}
    return DataFrame(data=data,index=index)

df = make_df([1,2,3,4],list('ABCD'))

# 查找重复的数据,如果不是第一次出现的数据则为True
print(df.duplicated())
print()

# 参数keep():设置是从前面往后面查或从后面往前面查,默认是从前往后查
print(df.duplicated(keep='last'))
print()

# 将第二行的数据给到第一行
df.iloc[0] = df.iloc[1]

# 修改数据,将第一行的最后一个修改成'D1'
df.iloc[0, 3] = 'D1'

# 参数subset():设置一列中要查找的数据
print(df.duplicated(subset=['A','B']))
print()

# 删除第二行
eg = df.duplicated(subset=['A','B'])
print(df.loc[~eg])
print()

# 对duplicated返回的bool取反
print(np.logical_not(eg))
print()

#删除重复的数据
print(df.drop_duplicates(subset=['A', 'B', 'C']))
1    False
2    False
3    False
4    False
dtype: bool

1    False
2    False
3    False
4    False
dtype: bool

1    False
2     True
3    False
4    False
dtype: bool

    A   B   C   D
1  A2  B2  C2  D1
3  A3  B3  C3  D3
4  A4  B4  C4  D4

1     True
2    False
3     True
4     True
dtype: bool

    A   B   C   D
1  A2  B2  C2  D1
3  A3  B3  C3  D3
4  A4  B4  C4  D4

Process finished with exit code 0

二、映射

2.1 替换元素

2.1.1
替换元素:replace()

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

# 创建数据框
index = ['张三','李四','王五','赵六']
data = {'语文':[45,56,44,4],'数学':[45,56,31,66],'英语':[45,56,21,11]}

df = DataFrame(data=data,index=index)
print(df)
print()

# 匹配整个数据框替换,不改变原数据框
new_df = df.replace({4:100, 31:99, 21:98, 58:97})
print(new_df)
print()

# 匹配某一行替换
new_df1 = df.iloc[2].replace({44:97})
print(new_df1)
print()

# 替换元素
df.iloc[0,2] = 100
print(df)
    语文  数学  英语
张三  45  45  45
李四  56  56  56
王五  44  31  21
赵六   4  66  11

     语文  数学  英语
张三   45  45  45
李四   56  56  56
王五   44  99  98
赵六  100  66  11

语文    97
数学    31
英语    21
Name: 王五, dtype: int64

    语文  数学   英语
张三  45  45  100
李四  56  56   56
王五  44  31   21
赵六   4  66   11

Process finished with exit code 0

2.2 新增行列

新增:map()

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

# 数据框生成函数
def make_df(index,columns):
    data = {k:[k+str(i) for i in index] for k in columns}
    return DataFrame(data=data,index=index)

df = make_df([1,2,3,4],list('ABCD'))
print(df)
print()

# 新增一列
df['E'] = df['D'].map({'D1':'E1','D2':'E2','D3':'E3','D4':'E4'})
print(df)
print()

# 新增一行,无法使用iloc来新增一行,索引不能扩大
df.loc[5] = df.loc[4].map({'A4':'A5','B4':'B5','C4':'C5','D4':'D5','E4':'E5'})
print(df)
    A   B   C   D
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4

    A   B   C   D   E
1  A1  B1  C1  D1  E1
2  A2  B2  C2  D2  E2
3  A3  B3  C3  D3  E3
4  A4  B4  C4  D4  E4

    A   B   C   D   E
1  A1  B1  C1  D1  E1
2  A2  B2  C2  D2  E2
3  A3  B3  C3  D3  E3
4  A4  B4  C4  D4  E4
5  A5  B5  C5  D5  E5

Process finished with exit code 0

2.3 替换索引

替换索引:rename()

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

# 数据框生成函数
def make_df(index,columns):
    data = {k:[k+str(i) for i in index] for k in columns}
    return DataFrame(data=data,index=index)

df = make_df([1,2,3,4],list('ABCD'))
print(df)
print()

# 替换列索引,不改变原来的数据库索引
new_df = df.rename(columns={'A':'a','B':'b','C':'c','D':'d'})
print(new_df)
print()

# 替换行索引,不改变原来的数据库索引
new_df1 = df.rename(index={1:'张三',2:'李四',3:'王五',4:'赵六'})
print(new_df1)
print()

# 用轴axis替换索引
new_df2 = df.rename({1:'语文',2:'英语',3:'数学',4:'理综'},axis=0)
print(new_df2)
print()

new_df3 = df.rename({'A':'张三','B':'李四','C':'王五','D':'赵六'},axis=1)
print(new_df3)
    A   B   C   D
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4

    a   b   c   d
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4

     A   B   C   D
张三  A1  B1  C1  D1
李四  A2  B2  C2  D2
王五  A3  B3  C3  D3
赵六  A4  B4  C4  D4

     A   B   C   D
语文  A1  B1  C1  D1
英语  A2  B2  C2  D2
数学  A3  B3  C3  D3
理综  A4  B4  C4  D4

   张三  李四  王五  赵六
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4

Process finished with exit code 0

三、异常值检测

3.1
查看每一列统计量描述状态:describe()
求每一列的标准差:std()
pycharm看不到详细描述,得使用Anaconda_Windows-2020这个软件才能看得到

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

# 数据框生成函数
def make_df(index,columns):
    data = {k:[k+str(i) for i in index] for k in columns}
    return DataFrame(data=data,index=index)

df = make_df([1,2,3,4],list('ABCD'))
print(df)
print()

# 查看每一列的统计量描述
print(df.describe())
print()

# 查看每一列的标准差
print(df.std())
    A   B   C   D
1  A1  B1  C1  D1
2  A2  B2  C2  D2
3  A3  B3  C3  D3
4  A4  B4  C4  D4

         A   B   C   D
count    4   4   4   4
unique   4   4   4   4
top     A2  B3  C3  D3
freq     1   1   1   1

Series([], dtype: float64)

Process finished with exit code 0

四、分组聚合

分组函数:groupby()

import numpy as np
import pandas as pd
from pandas import Series,DataFrame

data = {'学科':['语文','数学','数学','化学','化学','生物','语文'],'期中分数':[67,78,89,90,81,82,83],'期末分数':[56,57,58,59,71,72,73],'理综':[46,44,48,49,61,62,63]}
index = ['张三','李四','王五','赵六','小明','小红','小李']
df = DataFrame(data=data,index=index)
print(df)
print()

# 分组聚合
print(df.groupby(by='学科').sum())
print()

# 加后缀
print(df.add_suffix('-SUM'))
print()

# 加前缀
print(df.add_prefix('-SUM'))
print()

# transform():分组聚合,实现和分组聚合一样
new_df = df.groupby(by='学科')[['期中分数']].transform(sum)
print(new_df)
print()

# apply():分组聚合,实现和分组聚合一样,区别在于结果索引变成分组,容易观察
new_df1 = df.groupby(by='学科')[['期中分数']].apply(sum)
print(new_df1)
    学科  期中分数  期末分数  理综
张三  语文    67    56  46
李四  数学    78    57  44
王五  数学    89    58  48
赵六  化学    90    59  49
小明  化学    81    71  61
小红  生物    82    72  62
小李  语文    83    73  63

    期中分数  期末分数   理综
学科                 
化学   171   130  110
数学   167   115   92
生物    82    72   62
语文   150   129  109

   学科-SUM  期中分数-SUM  期末分数-SUM  理综-SUM
张三     语文        67        56      46
李四     数学        78        57      44
王五     数学        89        58      48
赵六     化学        90        59      49
小明     化学        81        71      61
小红     生物        82        72      62
小李     语文        83        73      63

   -SUM学科  -SUM期中分数  -SUM期末分数  -SUM理综
张三     语文        67        56      46
李四     数学        78        57      44
王五     数学        89        58      48
赵六     化学        90        59      49
小明     化学        81        71      61
小红     生物        82        72      62
小李     语文        83        73      63

    期中分数
张三   150
李四   167
王五   167
赵六   171
小明   171
小红    82
小李   150

    期中分数
学科      
化学   171
数学   167
生物    82
语文   150

Process finished with exit code 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值