暑期实践第十九天 2022-7-22

今日学习进度:

1.数据清洗

1.1查看与处理缺失值

缺失值指的是由于某种原因导致数据为空,这种情况一般有四种处理方式:不处理、删除、填充或替换、插值(以均值、中位数、众数等填补)

1.1.1查看缺失值

主要使用info方法

import pandas as pd
df=pd.read_excel('TB2018.xls')
print(df)
print(df.info())

结果

   买家会员名  买家实际支付金额  宝贝总数量                宝贝标题    类别              订单付款时间
0  mr001    143.50    2.0           Python黄金组合   图书 2018-10-09 22:54:26
1  mr002     78.80    1.0           Python编程锦囊  NaN 2018-10-09 22:52:42
2  mr003     48.86    1.0              零基础学C语言   图书 2018-01-19 12:53:01
3  mr004     81.75    NaN  SQL Server应用与开发范例宝典   图书 2018-06-30 11:46:14
4  mr005    299.00    1.0        Python程序开发资源库  NaN 2018-03-23 18:25:45
5  mr006     41.86    1.0           零基础学Python   图书 2018-03-24 19:25:45
6  mr007     55.86    1.0          C语言精彩编程200例   图书 2018-03-25 11:00:45
7  mr008     41.86    NaN          C语言项目开发实战入门   图书 2018-03-26 23:11:11
8  mr009     41.86    1.0         Java项目开发实战入门   图书 2018-03-27 07:25:30
9  mr010     34.86    1.0              SQL即查即用   图书 2018-03-28 18:09:12
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 6 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   买家会员名     10 non-null     object        
 1   买家实际支付金额  10 non-null     float64       
 2   宝贝总数量     8 non-null      float64       
 3   宝贝标题      10 non-null     object        
 4   类别        8 non-null      object        
 5   订单付款时间    10 non-null     datetime64[ns]
dtypes: datetime64[ns](1), float64(2), object(3)
memory usage: 608.0+ bytes
None

可以看见缺失值被NaN表示出来

判断数据是否存在缺失值,可以使用isnull和notnull方法

print(df.isnull())
print(df.notnull())

输出结果

   买家会员名  买家实际支付金额  宝贝总数量  宝贝标题      类别  订单付款时间
0  False     False  False  False  False   False
1  False     False  False  False   True   False
2  False     False  False  False  False   False
3  False     False   True  False  False   False
4  False     False  False  False   True   False
5  False     False  False  False  False   False
6  False     False  False  False  False   False
7  False     False   True  False  False   False
8  False     False  False  False  False   False
9  False     False  False  False  False   False
   买家会员名  买家实际支付金额  宝贝总数量  宝贝标题      类别  订单付款时间
0   True      True   True   True   True    True
1   True      True   True   True  False    True
2   True      True   True   True   True    True
3   True      True  False   True   True    True
4   True      True   True   True  False    True
5   True      True   True   True   True    True
6   True      True   True   True   True    True
7   True      True  False   True   True    True
8   True      True   True   True   True    True
9   True      True   True   True   True    True

使用isnull方法,缺失值返回True;非缺失值返回False;而notnull方法与isnull相反

如果使用df[df.isnull()==False]语句,则会将所有不是缺失值的数据找出来,但是只针对Series对象。

1.1.2缺失值删除处理

将缺失值删除,主要使用dropna方法,该方法用于删除含有缺失值的行。

df = df.dropna()

输出结果

   买家会员名  买家实际支付金额  宝贝总数量         宝贝标题   类别              订单付款时间
0  mr001    143.50    2.0    Python黄金组合  图书 2018-10-09 22:54:26
2  mr003     48.86    1.0       零基础学C语言  图书 2018-01-19 12:53:01
5  mr006     41.86    1.0    零基础学Python  图书 2018-03-24 19:25:45
6  mr007     55.86    1.0   C语言精彩编程200例  图书 2018-03-25 11:00:45
8  mr009     41.86    1.0  Java项目开发实战入门  图书 2018-03-27 07:25:30
9  mr010     34.86    1.0       SQL即查即用  图书 2018-03-28 18:09:12

有时可能出现整行为空的情况,此时可以在dropna方法中指定参数how='all',删除所有空行。

如果认为有些数据虽然存在缺失值,但是不影响数据分析,那么可以使用以下方法处理。例如,在上述数据中只保留“宝贝总数量”中不存在缺失值的数据,而类别是否缺失无所谓,则可以使用notnull方法判断

df1 = df[df['宝贝总数量'].notnull()]

输出结果

   买家会员名  买家实际支付金额  宝贝总数量          宝贝标题    类别              订单付款时间
0  mr001    143.50    2.0     Python黄金组合   图书 2018-10-09 22:54:26
1  mr002     78.80    1.0     Python编程锦囊  NaN 2018-10-09 22:52:42
2  mr003     48.86    1.0        零基础学C语言   图书 2018-01-19 12:53:01
4  mr005    299.00    1.0  Python程序开发资源库  NaN 2018-03-23 18:25:45
5  mr006     41.86    1.0     零基础学Python   图书 2018-03-24 19:25:45
6  mr007     55.86    1.0    C语言精彩编程200例   图书 2018-03-25 11:00:45
8  mr009     41.86    1.0   Java项目开发实战入门   图书 2018-03-27 07:25:30
9  mr010     34.86    1.0        SQL即查即用   图书 2018-03-28 18:09:12

1.1.3缺失值填充处理

DataFrame对象中的fillna函数可以实现填充缺失数据,pad/ffill函数表示用一个非缺失值去填充该缺失值,backfill/bfill函数表示用下一个非缺失值填充该缺失值,Name用于指定一个值去替换缺失值。

对于用于计算的数值型数据,如果为空,可以选择用0填充。

df['宝贝总数量'] = df['宝贝总数量'].fillna(0)

1.1.4重复值处理

对于数据中存在的重复数据,包括重复的行或者某几行中某几列的值重复,一般做删除处理,使用DataFrame对象中的drop_duplicates方法

print(df.duplicated())

如果返回值为False,表示不重复,返回值为True,表示重复。

去除全部重复的数据

print(df.drop_duplicates())

去除指定列的重复数据

print(df.drop_duplicates(['买家会员名']))

保留重复行中的最后一行

print(df.drop_duplicates(['买家会员名'],keep='last'))

keep的值有三个,keep='first'表示保留第一次出现的重复行,是默认值;keep是另外两个取值last和False,分别表示保留最后一次出现的重复行和去除所有的重复行。

直接删除,保留一个副本

print(df.drop_duplicates(['买家会员名','买家支付宝账号'],inplace=False))
inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。

1.1.5异常值的检测与处理

异常值是指超出或低于正常范围的值,检测有以下方法

(一)根据给定的数据范围进行判断,不在范围内的数据视为异常值

(二)均方差

(三)箱型图

处理方式有以下几种:

(一)最常用的方式是删除

(二)将异常值当缺失值处理,以个值填充

(三)将异常值当特殊情况进行分析,研究异常值出现的原因

2.索引设置

2.1重新设置索引

Pandas有一个很重要的方法是reindex,它的作用是创建一个适应新索引的新对象。语法如下:

DataFrame.reindex(labels = None,index = None,columns = None,axis = None,method = None,copy = True,level = None,fill_value = NaN,limit = None,tolerance = None)

method:默认值为None,重新设置索引时,选择插值(用来填充缺失数据)方法,其值可以是None,bfill/backfill(向后填充)、fill/pad(向前填充)等

fill_value:缺失值要填充的数据。如缺失值不用NaN填充,用0填充,则设置“fill_value=0”即可。

2.1.1对Series对象重新设置索引

import pandas as pd
s1 = pd.Series([88, 60, 75], index=[1, 2, 3])
print(s1)
print(s1.reindex([1, 2 , 3, 4, 5]))

输出结果

1    88
2    60
3    75
dtype: int64
1    88.0
2    60.0
3    75.0
4     NaN
5     NaN
dtype: float64

reindex方法根据新索引进行了重新排序,并且对缺失值自动填充NaN,不想用NaN填充可以为fill_value参数指定值,例如0。

print(s1.reindex([1, 2 , 3, 4, 5], fill_value=0))

而对于有一定顺序的数据,则可能需要插值来填充缺失的数据,可使用method参数

实现向前填充(和前面数据一样)、向后填充(和后面数据一样),代码如下

print(s1.reindex([1, 2 , 3, 4, 5], method='ffill'))
print(s1.reindex([1, 2 , 3, 4, 5], method='bfill'))

输出结果

1    88
2    60
3    75
4    75
5    75
dtype: int64
1    88.0
2    60.0
3    75.0
4     NaN
5     NaN
dtype: float64

2.1.2对DataFrame对象重新设置索引

对于DataFrame对象,reindex方法用于修改行索引和列索引

通过二维数组创建成绩表,代码如下

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[110, 105, 99], [105, 88, 115], [109, 120, 130]]
index = ['mr001', 'mr002', 'mr003']
columns = ['语文', '数学', '英语']
df = pd.DataFrame(data=data, columns=columns, index=index)
print(df)

通过reindex方法重新设置行索引

df = df.reindex(['mr001', 'mr002', 'mr003', 'mr004', 'mr005'])

通过reindex方法重新设置列索引

df = df.reindex(columns=['语文', '数学', '英语', '物理'])

通过reindex方法重新设置行索引和列索引

df = df.reindex(index=['mr001', 'mr002', 'mr003', 'mr004', 'mr005'],  columns=['语文', '数学', '英语', '物理'])

2.2设置某列为索引

设置某列为行索引主要使用set_index方法

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df=pd.read_excel('1月.xlsx')
print(df.head())
  买家会员名  买家实际支付金额 收货人姓名            宝贝标题
0      mrhy1             41.86     周某某      零基础学Python
1      mrhy2             41.86     杨某某      零基础学Python
2      mrhy3             48.86     刘某某      零基础学Python
3      mrhy4             48.86     张某某      零基础学Python
4      mrhy5             48.86     赵某某  C#项目开发实战入门

此时默认行索引为0,1,2,3,4,下面将“买家会员名”作为行索引

df = df.set_index(['买家会员名'])
            买家实际支付金额 收货人姓名            宝贝标题
买家会员名                                                 
mrhy1                  41.86     周某某      零基础学Python
mrhy2                  41.86     杨某某      零基础学Python
mrhy3                  48.86     刘某某      零基础学Python
mrhy4                  48.86     张某某      零基础学Python
mrhy5                  48.86     赵某某  C#项目开发实战入门

如果在set_index方法中传入参数“drop=True”,则会删除“买家会员名”如果传入“drop=False”,则会保留“买家会员名”,默认为False.

2.3数据清洗后重新设置连续的行索引

当我们对Dataframe对象进行数据清洗后,例如,去掉含NaN的行后,发现行索引没有变化。

如果我们要重新设置索引可以使用reset_index方法,在删除缺失数据后重新设置索引,代码如下

df=df.dropna().reset_index(drop=True)

这里设置drop=True才可以删除之前索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值