数据分析------数据处理(1)

1、数据导入

  数据存在的形式多种多样,如文件有 csv、Excel、txt 格式,数据库有 MySQL、Access、SQL Server 等形式。

1.1 导入 txt 文件

  read_table 函数,导入 txt 文件,格式如下:

read_table(file, names=[列名1,列名2,...], spe = "", ...)

  其中,file 为文件路径与文件名;

     names 为列名,默认为文件中的第一行作为列名;

     sep 为分隔符,默认为空。

  注意:(1)txt 文本文件要保存成 UTF-8 格式才不会报错;

     (2)查看数据框 df 前 n 项数据使用 df.head(n) ;后 m 项数据用 df.tail(m) 。默认均是 5 项数据。

1.2 导入 csv 文件

  read_csv 函数,导入 csv 文件,格式如下:

read_csv(file, names=[列名1,列名2,...], spe = "", ...)

  其中,file 为文件路径与文件名;

     names 为列名,默认为文件中的第一行作为列名;

     sep 为分隔符,默认为空,表示默认导入为第一列。

1.3 导入 Excel 文件

  read_excel 函数,导入 Excel 文件,格式如下:

read_excel (file, sheetname, header = 0)

  其中,file 为文件路径和文件名;

     sheetname 为 sheet 的名称,如 sheet1 ;

     header为列名,默认为 0(只接收布尔型数据 0 和 1),一般以文件的第一行作为列名。

  注意:(1)header 取 0 和 1 的差别,取 0 表示以文件第一行作为表头显示,取 1 表示把文件第一行丢弃,不作为表头显示。有时可以跳过首行或者读取多个表;

     (2)sheetname 可以指定为读取几个 sheet ,sheet 数目从 0 开始,如 sheetname=[0,2],则代表读取第 1 页和第 3 页的 sheet;skiprows=[0] 代表读取时跳过第 1 行。

2、数据导出

2.1 导出 csv 文件

  to_csv函数,,导出csv文件,其格式如下:

to_csv (file _path, sep=",", index=TRUE, header=TRUE)

  其中,file_path为文件路径;

     sep为分隔符,默认是逗号;

     index表示是否导出行序号,默认是TRUE,导出行序号;

     header表示是否导出列名,默认是TRUE,导出列名。

2.2 导出 Excel 文件

  to_excel 函数,导出 Excel 文件,其格式如下:

to_excel (file _path,  index=TRUE, header=TRUE)

  其中,file_path为文件路径;

     index表示是否导出行序号,默认是TRUE,导出行序号;

     header表示是否导出列名,默认是TRUE,导出列名。

3、数据清洗

  数据处理的主要内容包括数据清洗、数据抽取、数据交换和数据计算等。

  数据清洗是数据价值链中最为关键的步骤,数据清洗就是处理缺失数据以及清除无意义的信息,如删除原始数据中的无关数据、重复数据等。

3.1 重复值的处理

  在Pandas模块中去掉重复的数据,步骤如下:

  (1)利用 DataFrame 中的 duplicated 方法,返回一个布尔型的 Series,显示是否有重复行,没有重复的行显示为 FALSE,有重复的行则从第二行起均显示为 TRUE;

  (2)再利用 DataFrame 中的 drop_duplicates 方法返回一个移除了重复行的 DataFrame。

  duplicated 方法如下:

duplicated(self, subset=None, keep=‘first‘)

  其中,subset 用于识别重复的列标签或列标签序列,默认所有列标签;

     keep= ‘fist‘ 表示除了第一次出现外,其余相同的数据被标记为重复;

     keep = ‘last‘ 表示除了最后一次出现外,其余相同的数据被标记为重复; 

     keep= False表示所有相同的数据都被标记为重复。

  如果 duplicated 方法和 drop_ duplicates 方法中没有设置参数,则这两个方法默认判断全部列;如果在这两个方法中加入了指定的属性名(或者称为列名),例如 fame.drop_ dup licates([‘state‘]),则指定部分列( state列)进行重复项的判断。

  drop_ duplicates 方法用于把数据结构中行相同的数据去除(保留其中的一行)。

  代码示例如下:

In [1]: from pandas import DataFrame
           from pandas import Series
           df = DataFrame(({‘age‘: Series([26,85,64,85,85]),‘name‘: Series([‘Ben‘,‘John‘,‘Jerry",‘John‘,‘John‘])})
           df
Out[1]:
     age   name
0   26     Ben
1   85     John
2   64     Jerry
3   85     John
4   85     John

In [2]: df.duplicated()
Out[2]:
0   False
1   False
2   False
3   True
4   True
dtype: bool

In[3]: df.duplicated(‘name‘)
out[3]:
0   False
1   False
2   False
3   True
4   True
dtype: bool

In[4]: df.drop_duplicates(‘age‘)
out[4]:
     age   name
0   26     Ben
1   85     John
2   64     Jerry           

3.2 缺失值处理

  缺失值的处理包括以下两个步骤:

  (1)缺失数据的识别

  Pandas 使用浮点值 NaN 表示浮点和非浮点数组里的缺失数据,并使用 .isnull 和 .notnull 函数来判断缺失情况。

In [1]: from pandas import DataFrame
           from pandas import read_excel
           df = read_excel(r‘c:\Users\test\test.xisx‘, sheetname = ‘Sheet2‘)
           df
Out[1]:
         学号       姓名   英语     数分     高代    解几
0    2308024241    成龙    76      40.0    23.0    60
1    2308024244    周怡    66      47.0    47.0    44
2    2308024251    张波    85      NaN     45.0    60
3    2308024249    朱浩    65      72.0    62.0    71
4    2308024219    封印    73      61.0    47.0    46
5    2308024201    退培    60      71.0    76.0    71
6    2308024347    李华    67      61.0    65.0    78
7    2308024307    陈田    76      69.0    NaN     69
8    2308024326    余皓    66      65.0    61.0    71
9    2308024219    封印    73      61.0    47.0    46      

In[2]: df.isnull()
Out[2]:
           学号     姓名      英语       数分       高代      解几
0        False    False     False     False     False     False
1        False    False     False     False     False     False
2        False    False     False     True      False     False
3        False    False     False     False     False     False
4        False    False     False     False     False     False
5        False    False     False     False     False     False
6        False    False     False     False     False     False
7        False    False     False     False     True      False
8        False    False     False     False     False     False
9        False    False     False     False     False     False

In[3]: df.notnull()
Out[3]:
          学号     姓名      英语      数分     高代     解几
0        True    True     True     True     True    True
1        True    True     True     True     True    True
2        True    True     True     False    True    True
3        True    True     True     True     True    True
4        True    True     True     True     True    True
5        True    True     True     True     True    True
6        True    True     True     True     True    True
7        True    True     True     True     False   True
8        True    True     True     True     True    True
9        True    True     True     True     True    True

  (2)缺失数据的处理

  对于缺失数据的处理方式有以下几种:

  ① dropna():去除数据结构中值为空的数据行;

In [4]:newDF = df.dropna()
         newDF
Out[4]:
         学号       姓名   英语     数分     高代    解几
0    2308024241    成龙    76      40.0    23.0    60
1    2308024244    周怡    66      47.0    47.0    44
3    2308024249    朱浩    65      72.0    62.0    71
4    2308024219    封印    73      61.0    47.0    46
5    2308024201    退培    60      71.0    76.0    71
6    2308024347    李华    67      61.0    65.0    78
8    2308024326    余皓    66      65.0    61.0    71
9    2308024219    封印    73      61.0    47.0    46     

  ② df.fillna():用其他数据值代替 NaN,有事直接删除空数据会影响分析结果,因此可以对数据进行补充;

In [5]: df.fillna(‘?‘)
Out[5]:
         学号       姓名   英语     数分     高代    解几
0    2308024241    成龙    76      40.0    23.0    60
1    2308024244    周怡    66      47.0    47.0    44
2    2308024251    张波    85      ?       45.0    60
3    2308024249    朱浩    65      72.0    62.0    71
4    2308024219    封印    73      61.0    47.0    46
5    2308024201    退培    60      71.0    76.0    71
6    2308024347    李华    67      61.0    65.0    78
7    2308024307    陈田    76      69.0    ?       69
8    2308024326    余皓    66      65.0    61.0    71
9    2308024219    封印    73      61.0    47.0    46  

  ③ df.fillna(methon=‘pad‘):用前一个数据值代替 NaN ;

In [6]: df.fillna(method=‘pad‘)
Out[6]:
         学号       姓名   英语     数分     高代    解几
0    2308024241    成龙    76      40.0    23.0    60
1    2308024244    周怡    66      47.0    47.0    44
2    2308024251    张波    85      47.0    45.0    60
3    2308024249    朱浩    65      72.0    62.0    71
4    2308024219    封印    73      61.0    47.0    46
5    2308024201    退培    60      71.0    76.0    71
6    2308024347    李华    67      61.0    65.0    78
7    2308024307    陈田    76      69.0    65.0    69
8    2308024326    余皓    66      65.0    61.0    71
9    2308024219    封印    73      61.0    47.0    46  

  ④ df.fillna(method=‘bfill‘):用后一个数据值代替 NaN ;

In [7]: df.fillna(method=‘bfill‘)
Out[7]:
         学号       姓名   英语     数分     高代    解几
0    2308024241    成龙    76      40.0    23.0    60
1    2308024244    周怡    66      47.0    47.0    44
2    2308024251    张波    85      72.0    45.0    60
3    2308024249    朱浩    65      72.0    62.0    71
4    2308024219    封印    73      61.0    47.0    46
5    2308024201    退培    60      71.0    76.0    71
6    2308024347    李华    67      61.0    65.0    78
7    2308024307    陈田    76      69.0    61.0    69
8    2308024326    余皓    66      65.0    61.0    71
9    2308024219    封印    73      61.0    47.0    46  

  ⑤ df.fillna(df.mean()):用平均值或者其他描述性统计量来代替 NaN ;

In [8]: df.fillna(df.mean())
Out[8]:
         学号       姓名   英语     数分      高代    解几
0    2308024241    成龙    76      40.0     23.0    60
1    2308024244    周怡    66      47.0     47.0    44
2    2308024251    张波    85      60.778   45.0    60
3    2308024249    朱浩    65      72.0     62.0    71
4    2308024219    封印    73      61.0     47.0    46
5    2308024201    退培    60      71.0     76.0    71
6    2308024347    李华    67      61.0     65.0    78
7    2308024307    陈田    76      69.0     52.556  69
8    2308024326    余皓    66      65.0     61.0    71
9    2308024219    封印    73      61.0     47.0    46  

  ⑥ df.fillna(df.mean()[‘填补列名‘:‘计算均值的列名‘]):可以使用选择列的均值进行缺失值的处理 ;

In [9]: df.fillna(df.mean()[‘高代‘:‘解几‘])
Out[9]:
         学号       姓名   英语     数分      高代    解几
0    2308024241    成龙    76      40.0     23.0    60
1    2308024244    周怡    66      47.0     47.0    44
2    2308024251    张波    85      NaN      45.0    60
3    2308024249    朱浩    65      72.0     62.0    71
4    2308024219    封印    73      61.0     47.0    46
5    2308024201    退培    60      71.0     76.0    71
6    2308024347    李华    67      61.0     65.0    78
7    2308024307    陈田    76      69.0     52.556  69
8    2308024326    余皓    66      65.0     61.0    71
9    2308024219    封印    73      61.0     47.0    46  

  ⑦ df.fillna({‘列名1‘:值1, ‘列名2‘:值2}):可以传入一个字典,对不同的列填充不同的值;

In [10]: df.fillna({‘数分‘:100 , ‘高代‘:0 })
Out[10]:
         学号       姓名   英语     数分      高代    解几
0    2308024241    成龙    76      40.0     23.0    60
1    2308024244    周怡    66      47.0     47.0    44
2    2308024251    张波    85      100.0    45.0    60
3    2308024249    朱浩    65      72.0     62.0    71
4    2308024219    封印    73      61.0     47.0    46
5    2308024201    退培    60      71.0     76.0    71
6    2308024347    李华    67      61.0     65.0    78
7    2308024307    陈田    76      69.0     0.0     69
8    2308024326    余皓    66      65.0     61.0    71
9    2308024219    封印    73      61.0     47.0    46  

  ⑧ strip():清除字符型数据左右(首尾)指定的字符,默认为空格,中间的不清除。

In [11]: from pandas import DataFrame
           from pandas import Series
           df = DataFrame(({‘age‘: Series([26,85,64,85,85]),‘name‘: Series([‘Ben‘,‘John‘,‘Jerry",‘John‘,‘John‘])})
           df
Out[11]:
     age   name
0   26     Ben
1   85     John
2   64     Jerry
3   85     John
4   85     John

In[12]:df[‘name‘].str.strip()
Out[12]:
0    Ben
1    John
2    Jerry
3    John
4    John
Name: name, dtype: object

4、数据抽取

4.1 字段抽取

  抽出某列上指定位置的数据做成新的列,格式如下:

slice (start, stop)

  其中,start 表示开始位置,stop 表示结束位置。

4.2 字段拆分

  按指定的字符 sep ,拆分已有的字符串,格式如下:

split(sep , n , expand = False)

  其中,sep 表示用于分割字符串的分隔符;n 表示分割后新增的列数; expand 表示是否展开为数据框,默认为 FALSE ,返回 Series,若为 TRUE,返回 DataFrame。

4.3 重置索引

  指定某列为索引,以便于对其他数据进行操作,格式如下:

df.set_index(‘列名‘)

  示例代码如下:

In [1]: from pandas import DataFrame
           from pandas import Series
           df = DataFrame(({‘age‘: Series([26,85,64,85,85]),‘name‘: Series([‘Ben‘,‘John‘,‘Jerry",‘John‘,‘John‘])})
           df1 = df.set_index(‘name‘)
           df1
Out[1]:
name      age
Ben       26
John      85
Jerry     64
John      85
John      85

In[2]: df1.ix[‘John‘]  #ix函数是指通过行标签或者行号索引行数据,类似还有 loc、iloc等。
Out[2]:
name      age
John      85
John      85
John      85

4.4 记录抽取

  根据一定条件,对数据进行抽取,格式如下:

df[condition]

  其中,condition 表示过滤条件,返回值为 DataFrame ,常见的 condition 类型有:比较运算、范围运算、空置运算、字符匹配和逻辑运算等。

4.5 随机抽样

  随机从数据中按照一定的行数或者比例抽取数据,格式如下:

numpy.random.randint(start , end , num)

  其中,参数分别表示范围开始值、结束值、抽样个数。返回值为行的索引值序列。

  代码示例如下:

In[1]: from pandas import read_excel
          df = read_excel(r‘C:\Users\test\test4.xls)
          df.head()

Out[1]:
       学号           电话
0   2308024241   18922254812
1   2308024244   13522255003
2   2308024251   13422259938
3   2308024249   18822256753
4   2308024219   18922253721

In[2]: r = numpy.random.randint(0,3,2)
Out[2]:
       学号           电话
0   2308024241   18922254812
3   2308024249   18822256753

4.6 通过索引抽取数据

  (1)使用索引名(标签)选取数据:df.loc[行标签 , 列标签]

  df.loc 的第一个参数为行标签,第二个参数为列标签(可选,默认所有列标签),两个参数既可以是列表也可以是单个字符,如果两个参数都为列表,则返回 DataFrame ,否则为 Series 。当同时抽取多行时,行的索引必须是列表的形式,而不能简单地用逗号分隔。

  (2)使用索引号选取数据:df.loc[行索引号,列索引号]

4.7 字典数据抽取

  值将字典数据抽取为 DataFrame,有如下三种方法:

  (1)字典的 key 和 value 各作为一列,示例代码如下:

In[1]: import pandas
         from pandas import DataFrame
         d1 = {‘a‘:‘[1,2,3]‘ , ‘b‘:‘[0,1,2]‘}
         a1 = pandas.DataFrame.from_dict(d1, orient = ‘index‘)  #将字典转化为 DataFrame,且key 列做成了 index
         a1.index.name = ‘key‘  #将 index 的列名改为 ‘key‘
         b1 = a1.reset_index()  #重新增加 index,并将原 index 做成了 ‘key‘列
         b1.columns = [‘key‘ , ‘value‘]  #对列重新命名为 ‘key‘ 和 ‘value‘
         b1
Out[1]:
      key     value
0      b     [0,1,2]
1      a     [1,2,3]

  (2)字典里的每一个元素作为一列(同长),示例代码如下:

In[2]:d2 = {‘a‘:‘[1,2,3]‘ , ‘b‘:‘[0,1,2]‘}  #字典的 value 必须长度相等
         a2 = DataFame(d2)
         a2
Out[2]:
      a     b
0     1     4
1     2     5
2     3     6

  (3)字典里的每一个元素作为一列(不同长),示例代码如下:

In[3]: d = {‘one‘ : pandas.Series([1,2,3]) , ‘two‘ : pandas.Series([1,2,3,4])}  #字典的 value 必须长度可以不等
          df = pandas.DataFrame(d)
          df
Out[3]:
   one   two
0   1.0   1
1   2.0   2
2   3.0   3
3   NaN   4

--------------------------------------------

这里暂时只讲到数据导入、数据导出、数据清洗、数据抽取,后面将会讲到的还有数据处理的其他部分,如:插入记录、修改记录等。

原文地址:https://www.cnblogs.com/lifengB511/p/10848862.html

时间: 2024-10-13 01:11:37

数据分析------数据处理(1)的相关文章

python 数据分析--数据处理工具Pandas(1)

说明: 本文用到的数据集下载地址: 链接:https://pan.baidu.com/s/1zSOypUVoYlGcs-z2pT2t0w 提取码:z95a Pands模块可以帮助数据分析师轻松地解决数据的预处理问题,如数据类型的转换.缺失值的处理.描述性统计分析.数据的汇总等.Pandas模块的核心操作对象就是序列(Series)和数据框(DataFrame).序列可以理解为数据集中的一个字段,数据框是指含有至少两个字段(或序列)的数据集. 1. 序列和数据框的构造 1.1 构造序列 构造一个序

python 数据分析--数据处理工具Pandas(2)

在前面的学习中主要了解了Pandas如何构造序列和数据框,如何读取和写入各种格式的数据,以及如何对数据进行初步描述,本文将进一步了解Pandas如何处理字符串和日期数据,数据清洗,获取数据子集,透视表,分组聚合操作等内容. 4. Pandas处理字符串和日期数据 待处理的数据表 数据处理要求: 更改出生日期birthday和手机号tel两个字段的数据类型. 根据出生日期birthday和开始工作日期start_work两个字段新增年龄和工龄两个字段. 将手机号tel的中间四位隐藏起来. 根据邮箱

python数据分析-数据处理

数据导入: 导入csv from pandas import read_csv; df = read_csv('D://PA//4.1//1.csv') 导入文本,要转成UTF-8无BOM格式: from pandas import read_table; df = read_table('D://PA//4.1//2.txt') 导入excle from pandas import read_excel; df = read_excel('C:/PA/4.1/3.xlsx') 数据导出: 数据

史上最全的机器学习资料(上) 转

转自:http://www.afenxi.com/post/18593 摘要: 机器学习牵涉的编程语言十分之广,包括了MATLAB.Python.Clojure.Ruby等等.为了让开发者更加广泛.深入地了解机器学习,云栖社区组织翻译了GitHub Awesome Machine Learning 资源,涵盖24种编程语言的机器学习的框架.库以及其他相关资料. 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.

项目开发流程,以及什么是数据分析平台,再者为什么要做数据分析平台,数据来源,数据处理流程

一:项目开发流程 1.项目调研 了解项目的初始需求,然后结合市场的技术,看一下能否完成 2.需求分析 明确一个项目到底需要做什么? 最终做出的是什么样子? 重要性:一个好的需求分析能够明确项目的后续发展主题方向 3.方案设计 概要设计: 项目结构,技术选型 详细设计: 按照模块设计 4.编码实现 具体实现 5.测试 功能测试:功能是否达到了需求 集成测试:模块之间的兼容性 压力测试:高并发,多用户下,系统是否可以运行 用户测试:根据用户的建议进行修改 6.上线 试运行阶段:新系统与老系统同时在线

【数据处理】各门店销售库存数据分析

select a.pluno,a.pluname,a.spec,a.curcsprc ,a.slprc ,d.qty 西部销售,e.qty 东部销售,f.qty 中区销售,g.qty 团购销售,a1.qty 西部库存,a2.qty 东部库存,a3.qty 中区库存,a4.qty 团购库存from 商品码 aleft join (select pluno,sum(qty) qty from xbxs where rq between '20140701' and '20140801' group

Python数据分析、数据采集、数据可视化、图像数据处理分析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Excel数据处理与分析实战|Excel数据分析视频教程

Excel数据处理与分析实战网盘地址:https://pan.baidu.com/s/1CJcxxBwvkYttVEj6SyM5Hg 密码: yd5p备用地址(腾讯微云):https://share.weiyun.com/5W7Smea 密码:7x7f9u 本门课程详细介绍了 Microsoft Excel 的应用知识,Excel也称为电子表格,是Microsoft office 套装软件的一个重要组成部分.利用它可以进行各种数据的混合运算外,还可以应用于财务会计.统计分析.证券管理.决策管理以

大数据技术之_18_大数据离线平台_01_项目开发流程+大数据常用应用/分析平台/业务处理方式+数据分析平台的数据来源+数据处理的流程+项目集群的规模+需求分析+技术架构/选型

一.项目开发流程1.1.项目调研1.2.项目需求分析1.3.方案设计1.3.1.概要设计1.3.2.详细设计1.4.编码实现1.4.1.单元测试1.4.2.集成测试1.4.3.压力测试1.4.4.用户测试二.大数据常用应用2.1.数据出售2.2.数据分析2.2.1.百度统计2.2.2.友盟2.2.3.其他统计分析组织2.3.搜索引擎2.3.1.solr2.3.2.luence2.3.3.luence & solr 对比2.4.推荐系统(高数)2.4.1.技术2.4.2.算法2.5.精准营销2.5