用Python做数据分析之数据处理及数据提取

1、数据预处理

第四部分是数据的预处理,对清洗完的数据进行整理以便后期的统计和分析工作。主要包括数据表的合并,排序,数值分列,数据分组及标记等工作。

1)数据表合并

首先是对不同的数据表进行合并,我们这里创建一个新的数据表 df1,并将 df 和 df1 两个数据表进行合并。在 Excel 中没有直接完成数据表合并的功能,可以通过 VLOOKUP 函数分步实现。在 python 中可以通过 merge 函数一次性实现。

下面建立 df1 数据表,用于和 df 数据表进行合并。

1 #创建df1 数据表

2 df1=pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006,1007,1008],

3 'gender':['male','female','male','female','male','female','male','female'],

4 'pay':['Y','N','Y','Y','N','Y','N','Y',],

5 'm-point':[10,12,20,40,40,40,30,20]})

使用 merge 函数对两个数据表进行合并,合并的方式为 inner,将两个数据表中共有的数据匹配到一起生成新的数据表。并命名为 df_inner。

1#数据表匹配合并,inner 模式

2df_inner=pd.merge(df,df1,how='inner')

除了 inner 方式以外,合并的方式还有 left,right 和 outer 方式。这几种方式的差别在我其他的文章中有详细的说明和对比。

1#其他数据表匹配模式

2df_left=pd.merge(df,df1,how='left')3df_right=pd.merge(df,df1,how='right')4df_outer=pd.merge(df,df1,how='outer')

2)设置索引列

完成数据表的合并后,我们对 df_inner 数据表设置索引列,索引列的功能很多,可以进行数据提取,汇总,也可以进行数据筛选等。

设置索引的函数为 set_index。

1#设置索引列

2df_inner.set_index('id')

3)排序(按索引,按数值)

Excel中可以通过数据目录下的排序按钮直接对数据表进行排序,比较简单。Python 中需要使用 ort_values 函数和 sort_index 函数完成排序。

在 python 中,既可以按索引对数据表进行排序,也可以看制定列的数值进行排序。首先我们按 age 列中用户的年龄对数据表进行排序。

使用的函数为 sort_values。

1#按特定列的值排序

2df_inner.sort_values(by=['age'])

函数用来将数据表按索引列的值进行排序。

1#按索引列排序

2df_inner.sort_index()

3)数据分组

Excel中可以通过 VLOOKUP 函数进行近似匹配来完成对数值的分组,或者使用"数据透视表"来完成分组。相应的 python 中使用 where 函数完成数据分组。

Where函数用来对数据进行判断和分组,下面的代码中我们对 price 列的值进行判断,将符合条件的分为一组,不符合条件的分为另一组,并使用group 字段进行标记。

1#如果price 列的值>3000,group 列显示 high,否则显示 low

2df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')

除了 where 函数以外,还可以对多个字段的值进行判断后对数据进行分组,下面的代码中对city 列等于 beijing 并且 price 列大于等于 4000 的数据标记为 1。

1#对复合多个条件的数据进行分组标记

2df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1

4)数据分列

与数据分组相反的是对数值进行分列,Excel 中的数据目录下提供"分列"功能。在 python 中使用 split 函数实现分列。

在数据表中 category 列中的数据包含有两个信息,前面的数字为类别 id,后面的字母为 size 值。中间以连字符进行连接。我们使用 split 函数对这个字段进行拆分,并将拆分后的数据表匹配回原数据表中。

1 #对category 字段的值依次进行分列,并创建数据表,索引值为 df_inner 的索引列,列名称为 category 和 size

2 pd.DataFrame((x.split('-') for x in df_inner['category']),index

=df_inner.index,columns=['category','size'])

1#将完成分列后的数据表与原 df_inner 数据表进行匹配

2df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)

2、数据提取

第五部分是数据提取,也是数据分析中最常见的一个工作。这部分主要使用三个函数,loc,iloc 和 ix,loc 函数按标签值进行提取,iloc 按位置进行提取,ix 可以同时按标签和位置进行提取。下面介绍每一种函数的使用方法。

1)按标签提取(loc)

Loc函数按数据表的索引标签进行提取,下面的代码中提取了索引列为 3 的单条数据。

1#按索引提取单行的数值

2df_inner.loc[3]3id 10044date 2013-01-05 00:00:005city shenzhen6category 110-C7age 328price 54339gender female10m-point 4011pay Y12group high13sign NaN14category_1 11015size C16Name: 3, dtype: object

使用冒号可以限定提取数据的范围,冒号前面为开始的标签值,后面为结束的标签值。下面提取了 0 到 5 的数据行。

1#按索引提取区域行数值

2df_inner.loc[0:5]

Reset_index函数用于恢复索引,这里我们重新将 date 字段的日期设置为数据表的索引,并按日期进行数据提取。

1#重设索引

2df_inner.reset_index()

1#设置日期为索引

2df_inner=df_inner.set_index('date')

使用冒号限定提取数据的范围,冒号前面为空表示从 0 开始。提取所有 2013 年 1 月 4 日以前的数据。

1#提取 4 日之前的所有数据

2df_inner[:'2013-01-04']

2)按位置提取(iloc)

使用 iloc 函数按位置对数据表中的数据进行提取,这里冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从 0 开始。

1#使用iloc 按位置区域提取数据

2df_inner.iloc[:3,:2]

iloc函数除了可以按区域提取数据,还可以按位置逐条提取,前面方括号中的 0,2,5 表示数据所在行的位置,后面方括号中的数表示所在列的位置。

1#使用iloc 按位置单独提取数据

2df_inner.iloc[[0,2,5],[4,5]]

3)按标签和位置提取(ix)

ix是 loc 和 iloc 的混合,既能按索引标签提取,也能按位置进行数据提取。下面代码中行的位置按索引日期设置,列按位置设置。

1#使用 ix按索引标签和位置混合提取数据

2df_inner.ix[:'2013-01-03',:4]

4)按条件提取(区域和条件值)

除了按标签和位置提起数据以外,还可以按具体的条件进行数据。下面使用 loc 和 isin 两个函数配合使用,按指定条件对数据进行提取 。

使用 isin 函数对 city 中的值是否为 beijing 进行判断。

1 #判断 city 列的值是否为 beijing

2 df_inner['city'].isin(['beijing'])

3

4 date

5 2013-01-02 True

6 2013-01-05 False

7 2013-01-07 True

8 2013-01-06 False

9 2013-01-03 False

10 2013-01-04 False

11 Name: city, dtype: bool

将 isin 函数嵌套到 loc 的数据提取函数中,将判断结果为 Ture 数据提取出来。这里我们把判断条件改为 city 值是否为 beijing 和 shanghai。如果是就把这条数据提取出来。

1#先判断city 列里是否包含 beijing 和 shanghai,然后将复合条件的数据提取出来。

2df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])]

5)按筛选条件提取

数值提取还可以完成类似数据分列的工作,从合并的数值中提取出制定的数值。

1 category=df_inner['category']

2 0 100-A

3 3 110-C

4 5 130-F

5 4 210-A

6 1 100-B

7 2 110-A

8 Name: category, dtype: object

9

10 #提取前三个字符,并生成数据表

11pd.DataFrame(category.str[:3])

文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

相关推荐
Bi8bo74 分钟前
Python编程基础
开发语言·python
项目題供诗6 分钟前
黑马python(七)
python
是紫焅呢43 分钟前
N数据分析pandas基础.py
python·青少年编程·数据挖掘·数据分析·pandas·学习方法·visual studio code
胖墩会武术1 小时前
Black自动格式化工具
python·格式化·black
im_AMBER2 小时前
java复习 19
java·开发语言
struggle20252 小时前
DIPLOMAT开源程序是基于深度学习的身份保留标记对象多动物跟踪(测试版)
人工智能·python·深度学习
发现你走远了2 小时前
什么是状态机?状态机入门
python·状态机
小猫咪怎么会有坏心思呢2 小时前
华为OD机考-异常的打卡记录-字符串(JAVA 2025B卷)
java·开发语言·华为od
泓博2 小时前
KMP(Kotlin Multiplatform)简单动画
android·开发语言·kotlin
芒果快进我嘴里3 小时前
C++打印乘法口诀表
开发语言·c++