python数据分析-数据清洗与整理

又开始我的好好学习之旅,这周学习数据分析,居老师日常动力!



python数据清洗常用的函数 python如何进行数据清洗_缺失值


今天要跟着罗罗攀(公众号:luoluopan1)学pandas数据清洗、合并、重塑以及字符串处理,数据均来自罗罗攀,敲棒~
1.数据清洗
处理缺失值

第一步:找出缺失值
主要通过 **isnull **和 **notnull **方法返回 **布尔值 **来判断什么位置有缺失值
(注:使用juypter notebok)

from pandas import DataFrame,Series
import pandas as pd 
import numpy as np
df = DataFrame([[3,4,5],[1,6,np.nan],['xxj','xf',np.nan],[np.nan,'a','b']])
df.isnull()
df.notnull()

python数据清洗常用的函数 python如何进行数据清洗_缺失值_02


通过sum可以获得每一列的缺失值数量,在通过sum可以获得整个DataFrame的缺失值数量

df.isnull().sum()
df.isnull().sum().sum()

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_03


通过info的方法可以获得整个DataFrame的数据缺失情况

python数据清洗常用的函数 python如何进行数据清洗_数据_04


第二步:处理缺失值

主要有删除缺失值、填充缺失值两种方法

(1) 可通过dropna方法删除有缺失值的所在行,记住是所在整个行

python数据清洗常用的函数 python如何进行数据清洗_数据_05


dropna方法可传入参数,传入how=‘all’,则会删除全部都为NAN的行,还是整个行

df2 = DataFrame(np.arange(12).reshape(3,4))
df2[3]=np.nan
df2.iloc[2,:]=np.nan
df2.dropna(how='all')

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_06


如果想删除包含缺失值的所在整个列,同样传入参数axis=1即可

df2.dropna(how='all',axis=1)

python数据清洗常用的函数 python如何进行数据清洗_数据_07


(2) 填充缺失值

有时候我们不能删除数据时,可以通过fillna方法替换缺失值

df.fillna(0)

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_08


python数据清洗常用的函数 python如何进行数据清洗_缺失值_09


在fillna中传入字典结构可针对不同的列填充不同的值,注意针对的是列

python数据清洗常用的函数 python如何进行数据清洗_缺失值_10


但是这里对原始数据df2没有进行修改,可通过inplace对原数据进行修改

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_11


fillna还有很多参数,可以通过“?”来查询

df.fillna?

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_12

移除重复数据

尤其是爬虫过程中由于网络原因可以会有重复值,通过duplicated方法判断是否有重复值

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_13


通过drop_duplicates()方法删除重复项

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_14


每行每个字段都一样才会认为是重复项

我们可以通过指定部分列作为判断重复的依据

python数据清洗常用的函数 python如何进行数据清洗_数据_15


drop_duplicates()方法也是一样的

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_16


通过上面可以发现,总是保留最先出现的,可通过传入keep='last’保留最后一个出现的组合,虽然感觉保留谁反正都是一样的。。。。。= =

python数据清洗常用的函数 python如何进行数据清洗_缺失值_17

替换值

通过replace进行替换,传入方式可以是列表、字典

python数据清洗常用的函数 python如何进行数据清洗_数据_18

函数

map:将函数套用在Series的 每个元素中;
apply:将函数要用在DataFrame的行和列上;
applymap:讲函数套用在DataFrame的每个元素上
这里可以用map,也可以用apply

python数据清洗常用的函数 python如何进行数据清洗_缺失值_19

data = {
     'name':['张三','李四','王五','张三'],
    'math':[78,89,94,56]
}
df = DataFrame(data)

def f(x):
    if x>= 90:
        return '棒!'
    elif 70<=x<90:
        return '一般般!'
    elif 60<=x<70:
        return '差!'
    else:
        return '没救了!'
        
df['class'] = df['math'].map(f)
df
检测异常值

通常使用可视化来看不正常的数据,但不代表所有离群点都是异常值,可能他本来就是这样的

通常会用散点图来观察plot(kind=‘scatter’)

python数据清洗常用的函数 python如何进行数据清洗_数据_20

虚拟变量

在机器学习中,只有数值型的数据才能被学习,对于一些分类变量则需要转换成虚拟变量(也就是0,1矩阵,有是1,没有是0),通过get_dummies函数即可实现

df = DataFrame({
    '朝向':['东','南','西','东','北','东'],
    '价格':[1200,2300,2100,2900,1400,5600]
})
pd.get_dummies(df['朝向'])

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_21


对于多类别的数据而言,需要通过函数来解决,dummies没有办法直接处理

dummies = df2['朝向'].apply(lambda x : Series(x.split('/')).value_counts())
dummies = dummies.fillna(0).astype(int)
dummies

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_22

2.数据合并和重塑
merge合并

通过merge函数按照一个或多个键将两个DataFrame按行合并起来

连接方式有:inner内连接,left左连接,right右连接,outer外连接

merge默认是inner,即返回的为交集,只连接都有的值

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_23


可以指定按什么键链接

pd.merge(amount,price,on='fruit')
pd.merge(amount,price,left_on='fruit2',right_on='fruit1')

python数据清洗常用的函数 python如何进行数据清洗_数据_24


不同的连接方式:

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_25


以上是多对一的连接,因为price的fruit都是唯一值,如果是多对多,则会出现笛卡尔积

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_26


可以通过多个键进行合并

python数据清洗常用的函数 python如何进行数据清洗_缺失值_27


合并时可能存在重名,默认操作是加后缀 _x_y

我们也可以利用suffixes进行自定义

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_28


可能连接的键是在DataFrame的索引上,可通过left_index=True或者right_index=True来指定索引作为连接键

python数据清洗常用的函数 python如何进行数据清洗_数据_29


DataFrame有join方法,可以按索引合并

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_30


注:列表名不能一样,这里是value1和value2,如果一样会报错

concat连接

如果合并的数据没有连接键,则不能使用merge,可以使用concat方法

默认情况下concat是axis=0,即垂直连接进行堆积

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_31


也可以水平连接

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_32


这样进行连接,在pd里会生成DataFrame,类似于外连接

concat只有内连接和外连接,通过join=‘inner’实现内连接

python数据清洗常用的函数 python如何进行数据清洗_缺失值_33


通过join_axes=[]来改变索引的顺序

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_34


连接对象在结果中是无法分开的,可通过keys参数给连接的对象创建一个层次化索引

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_35


如果按列进行连接,keys就成了列索引

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_36

combine_first合并

如果需要合并的两个DataFrame存在重复的列索引,可以使用combine_first方法,类似于打补丁。

python数据清洗常用的函数 python如何进行数据清洗_缺失值_37

4. 数据重塑

两个常用方法:stack方法将DF的列“旋转”为行,unstack方法将DF的行“旋转”为列

df = DataFrame(np.arange(9).reshape(3,3),
              index=['a','b','c'],
              columns=['one','two','three'])
df.index.name = 'alpha'
df.columns.name = 'number'
result = df.stack()
result

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_38


df.unstack是互逆的

默认下,数据重塑操作都是最内层的,也可以通过级别的编号和名称制定其他级别进行重塑

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_39


数据重塑的操作是最内层的,操作结果也是使旋转轴位于最低级别

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_40


python数据清洗常用的函数 python如何进行数据清洗_数据_41

3. 字符串处理

字符串方法,通过使用pandas中str属性

python数据清洗常用的函数 python如何进行数据清洗_缺失值_42


字符串处理还可以用正则表达式

python数据清洗常用的函数 python如何进行数据清洗_数据_43

4. 综合案例

第一步:数据来源

Iris(鸢尾花卉)数据

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_44


第二步:定义问题

按照鸢尾花特征分出鸢尾花的分类

第三步:清洗数据

(1)检查数据是否有异常

对数据进行简单描述,用describe()函数

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_45


通过unique函数检查类别有几种(数据被修改过方便做练习——《从零开始学python数据分析》)

应该是三种类别,这里有5种,可以发现类别的名字写错了,应该是Iris_setosa,Iris_virginica,Iris_versicolor这三种。

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_46


对原始数据进行修改

iris_data.loc[iris_data['class']=='versicolor','class']='Iris-versicolor'
iris_data.loc[iris_data['class']=='Iris-setossa','class']='Iris-setosa'

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_47

sns.pairplot(iris_data,hue='class')

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_48


先观察第一列:有几个Iris_versicolor样本中的sepal_length_cm偏离了大部分数据

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_49


切数据均小于0.1,通过索引选取Iris_versicolor样本中sepal_length_cm值小于0.1的数据,且假设这些数据是因为单位设置问题,即*100

iris_data.loc[(iris_data['class']=='Iris-versicolor') & (iris_data['sepal_length_cm'] < 0.1),'sepal_length_cm'] *=100
iris_data.loc[(iris_data['class']=='Iris-versicolor')]

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_50


观察第二行:一个Iris_setosa样本的sepal_width_cm偏离了大部分的点

python数据清洗常用的函数 python如何进行数据清洗_数据_51


通过对Iris_setosa的花萼宽度回执直方图进行观察

python数据清洗常用的函数 python如何进行数据清洗_python数据分析_52


为了观察的更仔细,可以发现异常值都大于2.5cm,所以先把小于2.5cm的过滤掉

python数据清洗常用的函数 python如何进行数据清洗_数据清洗_53


(2)检查数据是否有缺失

可以发现其中花瓣宽度有5条缺失值

python数据清洗常用的函数 python如何进行数据清洗_缺失值_54


把缺失值删除掉

python数据清洗常用的函数 python如何进行数据清洗_缺失值_55


注:inplace是指在原始数据进行修改

最后对清洗好的数据进行保存,一遍后续的数据探索

python数据清洗常用的函数 python如何进行数据清洗_缺失值_56


第四步:数据探索

还是利用之前的散点矩阵代码,对新的数据进行可视化

python数据清洗常用的函数 python如何进行数据清洗_数据_57


还可以绘制其他的图形,如直方图

python数据清洗常用的函数 python如何进行数据清洗_python数据清洗常用的函数_58