用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.loc33id 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.loc0: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.locdf_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)

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

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

相关推荐
用户8356290780511 小时前
使用 Python 操作 Word 内容控件
后端·python
LDR0061 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术1 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 小时前
C++20 Modules 模块详解
java·开发语言·spring
swordbob2 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享3 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.3 小时前
C语言--day30
c语言·开发语言
码云骑士3 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
何以解忧,唯有..3 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang