引入

  numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢? numpy能够帮我们处理处理数值型数据,但是这还不够 很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等 比如:我们通过爬虫获取到了存储在数据库中的数据 比如:之前youtube的例子中除了数值之外还有国家的信息,视频的分类(tag)信息,标题信息等 所以,numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据。

什么是pandas?

  pandas是一个Python软件包,提供快速,灵活和富于表现力的数据结构,旨在使使用“关系”或“标记”数据既简单又直观。它旨在成为在Python中进行实际,真实世界数据分析的基本高级构建块。此外,其更广泛的目标是成为任何语言中可用的最强大,最灵活的开源数据分析/操作工具。它已经朝着这个目标迈进了。

pandas的常用数据类型

  1、Series 一维,带标签数组

  2、DataFrame 二维,Series容器

(1)Series创建

  1. pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

data :类 数组,可迭代,字典或标量值,包含存储在系列中的数据。在0.23.0版中进行了更改:如果data是dict,则将为Python 3.6及更高版本维护参数顺序。

index :类 数组或索引(1d)值必须是可散列的,并且与data的长度相同。允许使用非唯一索引值。如果未提供,则默认为RangeIndex(0,1,2,…,n)。如果同时使用了字典和索引序列,则索引将覆盖在字典中找到的键。

dtype : STR,numpy.dtype,或ExtensionDtype,可选

输出系列的数据类型。如果未指定,则将从data推断出来。

copy: bool,默认为False,copy输入数据。

  1. import pandas as pd
  2. import numpy as np
  3. t = pd.Series(np.arange(12),index= list("asdfghjklpoi"))
  4. print(t)
    print(type(t))

注意几个问题:pd.Series能干什么,能够传入什么数据类型让其变为series结构。index是什么,在什么位置,对于我们常见的数据库数据或者ndarray来说,index到底是什么如何给一组数据指定index。

  1. c = {"name":"lishuntao","age":18,"gender":"boy"}
  2. t1 = pd.Series(c)
  3. print(t1)
  4. print(type(t1))
  5. print(t1["name"])
  6. print(t1["gender"])

从上面可以看出,通过字典创建一个Series,字典的键就是索引。

重新给其绑定其他的索引之后,如果能够对应的上,就取其值,如果不能,就为Nan。如图所示:

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. a = {"a":12,"name":"lishuntao","c":"xiaoc","age":18,"gender":"man"}
  5.  
  6. t1 = pd.Series(a)
  7. print(t1)
  8. print(type(t1))
  9. t2 = pd.Series(a,index=list("abcdf"))
  10. print(t2)

numpy中的nan为float,pandas会自动根据数据类型更改series的dtype类型。

Series切片和索引

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. a = {"a":12,"name":"lishuntao","c":"xiaoc","age":18,"gender":"man"}
  5.  
  6. t1 = pd.Series(a)
  7. print(t1)
  8. print(t1[:2])
  9. print(t1[1])
  10. print(t1[["a","c","gender"]])
  11. print(t1[0:5:2])

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. a = np.arange(12)
  5. t1 = pd.Series(a)
  6. print(t1)
  7. print(t1[t1>9])

Series的索引和值

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. a = np.arange(12)
  5. t1 = pd.Series(a)
  6. #print(t1)
  7. print(t1.index)
  8. print(t1.values)

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. a = np.arange(12)
  5. t1 = pd.Series(a)
  6. print(t1)
  7. print(type(t1.index))
  8. print(type(t1.values))

Series对象本质上有两个数组构成,一个数组构成对象的键(index,索引),一个数组构成对象的值(values),键--->值。

ndarray的很多方法都可以运用与series类型,比如argmax,clip

series具有where方法,但是结果却不同(下面是官方文档给出)

Series.where(self, cond[, other, inplace, …]) Replace values where the condition is False.
  1. a = np.arange(12)
  2. t1 = pd.Series(a)
  3. print(t1)
  4. #替换条件是False的情况 下面两个结果一样
  5. print(t1.where((t1>8),1))
    print(pd.Series.where(t1,(t1>4),1))

pandas之读取外部数据

  现在假设我们有一个组关于狗的名字的统计数据,那么为了观察这组数据的情况,我们应该怎么做呢?

  

  数据来源:https://www.kaggle.com/new-york-city/nyc-dog-names/data

我们的这组数据存在csv中,我们直接使用pd. read_csv即可

  1. import numpy as np
  2. import pandas as pd
  3. t2 = pd.read_csv("F:\BaiduNetdiskDownload\youtube_video_data\dogNames2.csv")
  4. print(t2)
  5. print(type(t2))

和我们想象的有些差别,他是一个DataFrame,那么接下来我们就来了解这种数据类型

但是,还有一个问题:

对于数据库比如mysql或者mongodb中数据我们如何使用呢?

pd.read_sql(sql_sentence,connection)

那么,mongodb呢?(先用mongodb自己读出来,然后将它传入到DataFrame中,就可以实现读取)

(2)DataFrame的创建

  1. pd.DataFramedata,index,columns,dtype,copy

参数比Series多了columns,从中可以看出这是列索引(Index or array-like Column labels to use for resulting frame. Will default to RangeIndex (0, 1, 2, ..., n) if no column labels are provided)

  1. import numpy as np
  2. import pandas as pd
  3. t2 = pd.DataFrame(np.arange(12).reshape(3,4))
  4. print(t2)

 从上面我们可以看出DataFrame对象既有行索引,又有列索引

行索引:表明不同行,横向索引,叫index,0轴,axis=0

列索引:表明不同列,纵向索引,叫columns,1轴,axis=1

 自定义索引标签:

  1. t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
  2. print(t2)

DataFrame的基础属性

  1. t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
  2. print(t2)
  3. print(t2.shape)#显示行数,列数
  4. print(t2.dtypes)#显示的是列数据类型
  5. print(t2.ndim)#数据维度20,1
  6. print(t2.index)#行索引
  7. print(t2.columns)#列索引 Index(['W', 'X', 'Y', 'Z'], dtype='object')
  8. print(t2.values)#对象值,二维ndarray的数组

DataFrame整体情况查询

  1. t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
  2. print(t2)
  3. #print(t2.head())
  4. print(t2.head(1))#显示头几行,默认5
  5. print(t2.tail(2))#显示末尾几行,默认5
  6. print(t2.info())#相关信息浏览:行数,列数,列索引,列非空值个数,列类型,列类型,内存占用
  7. print(t2.describe())#快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值

动手:那么回到之前我们读取的狗名字统计的数据上,我们尝试一下刚刚的方法

那么问题来了:

肯定想知道使用次数最高的前几个名字是什么呢?

  1. pd.DataFrame.sort_values(by="Count_AnimalName",ascending=False)#ascending=True升序排序 by是对那一列排序 输入列索引键
  1. t2 = pd.read_csv("F:\BaiduNetdiskDownload\youtube_video_data\dogNames2.csv")
  2. print(t2)
  3.  
  4. t3 = t2.sort_values(by="Count_AnimalName",ascending=False)
  5. print(t3)

那么问题又来了:

如果我的数据有10列,我想按照其中的第1,第3,第8列排序,怎么办?

pandas之取行或者列

  刚刚我们知道了如何给数据按照某一行或者列排序,那么现在我们想单独研究使用次数前100的数据,应该如何做?

  1. t2 = pd.read_csv("F:\BaiduNetdiskDownload\youtube_video_data\dogNames2.csv")
  2. print(t2)
  3.  
  4. t3 = t2.sort_values(by="Count_AnimalName",ascending=False)
  5. print(t3[:100])

我们具体要选择某一列该怎么选择呢?t2[" Count_AnimalName "]

我们要同时选择行和不同列该怎么办?(和numpy类似)

pandas之loc取行数据

  1、t2.loc 通过标签索引行数据(标签)

  1. print(t2.loc["a","W"])
  2. print(t2.loc["a",["W","Y"]])
  3. print(type(t2.loc["a",["W","Y"]]))
  4. print(t2.loc[["a","b"],["Z","Y"]])
  5. print(t2.loc[:"c",:"Y"])
  6. print(t2.loc["a":"b",["W","Z"]])

 2、t2.iloc 通过位置获取行数据(位置)

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
  5. print(t2)
  6. print(t2.iloc[0:2,0:4])
  7. print(t2.iloc[[0,2],[1,3]])
  8. t2.loc["a","Y"] = 100 #复制操作
  9. print(t2)
  10. t2.iloc[1:2,[1]] = 1000 #复制操作
  11. print(t2)

pandas之布尔索引(且,或,&,|,)

  回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过800的狗的名字,应该怎么选择?

  1. print(t2[t2["Count_AnimalName"]>800])

回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字,应该怎么选择?

  1. print(t2[(t2["Row_Labels"].str.len()>4)&(t2["Count_AnimalName"]>700)])

pandas之字符串方法

缺失数据的处理:

  观察这组数据

  我们的数据缺失通常有两种情况: 一种就是空,None等,在pandas是NaN(和np.nan一样) 另一种是我们让其为0(蓝色框中)

  对于NaN的数据,在numpy中我们是如何处理的?

  在pandas中我们处理起来非常容易 判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

  处理方式1:删除NaN所在的行列

    dropna (axis=0, how='any', inplace=False)

  处理方式2:填充数据,

    t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

   处理为0的数据:t[t==0]=np.nan 当然并不是每次为0的数据都需要处理 计算平均值等情况,nan是不参与计算的,但是0会

 

  1. import numpy as np
  2. import pandas as pd
  3.  
  4. t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
  5. #print(t2)
  6. t2.loc[:"b",["W","Y"]] = np.nan
  7. print(t2)
  8. print(pd.isnull(t2))
  9. print(pd.notnull(t2))
  10. #print(t2.dropna(axis=0,how="all",inplace=False))
  11. #any只要含NaN就删除前面规定的行列,all需要的是行列全部为NAN才能删除
  12. #填充数据
  13. #print(t2.fillna(t2.mean()))
  14. print(t2)
  15. print(t2.fillna(t2.median()))
  16. print(t2.fillna(0))

05-pandas索引切片读取数据缺失数据处理的更多相关文章

  1. Pandas索引和选择数据

    在本章中,我们将讨论如何切割和丢弃日期,并获取Pandas中大对象的子集. Python和NumPy索引运算符"[]"和属性运算符".". 可以在广泛的用例中快 ...

  2. pandas.read_csv()函数读取文件时,关于“header=None”影响读取列数区间的右闭合总结

    对于一个没有字段名标题的数据,如data.csv 1.获取数据内容.pandas.read_csv("data.csv")默认情况下,会把数据内容的第一行默认为字段名标题. imp ...

  3. Pandas缺失数据处理

    Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...

  4. Pandas 索引和切片

    Series和Datafram索引的原理一样,我们以Dataframe的索引为主来学习 列索引:df['列名'] (Series不存在列索引) 行索引:df.loc[].df.iloc[] 选择列 / ...

  5. Pandas | 17 缺失数据处理

    数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构 ...

  6. 浅谈python之利用pandas和openpyxl读取excel数据

    在自学到接口自动化测试时, 发现要从excel中读取测试用例的数据, 假如我的数据是这样的: 最好是每行数据对应着一条测试用例, 为方便取值, 我选择使用pandas库, 先安装 pip instal ...

  7. 其它课程中的python---5、Pandas处理数据和读取数据

    其它课程中的python---5.Pandas处理数据和读取数据 一.总结 一句话总结: 记常用和特例:慢慢慢慢的就熟了,不用太着急,慢慢来 库的使用都很简单:就是库的常用函数就这几个,后面用的时候学 ...

  8. numpy和pandas的基础索引切片

    Numpy的索引切片 索引 In [72]: arr = np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]]) In [73]: arr Out[73]: a ...

  9. 三、Python系列——Pandas数据库读取数据

    Pandas主要先读取表格类型的数据,然后进行分析. import pandas as pd# 由于是用pandas模块操作数据,因此不用在路径前加open,否则就是python直接打开文件,可能还会 ...

随机推荐

  1. redis desktop manager安装及连接方式

    1.下载安装包 官网下载地址:https://redisdesktop.com/pricing 官网下载需要付费使用 再此附上一个免费的破解版本,绿色安全可用 链接:https://pan.baidu ...

  2. HDU2485Destroying the bus stations 拆点网络流求割点个数

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题目要求:删除最少的点,使得源点到汇点的距离大于k 思路:拆点.建图求费用小于等于k的最大流 # ...

  3. CF992B Nastya Studies Informatics 数学(因子) 暴力求解 第三道

    Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input st ...

  4. css3-旋转的太极图

    123 body { background-color: #aaa; } .div { width: 400px; height: 400px; border-radius: 50%; border: ...

  5. springmvc两种非注解的处理器映射器

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. [大数据学习研究] 3. hadoop分布式环境搭建

    1. Java安装与环境配置 Hadoop是基于Java的,所以首先需要安装配置好java环境.从官网下载JDK,我用的是1.8版本. 在Mac下可以在终端下使用scp命令远程拷贝到虚拟机linux中 ...

  7. 使用vitamio长时间播放崩溃的另类处理

    最近公司一个项目在公交站旁边弄一个 广告牌,上面是广告视频,下面是广告图片,都是无限轮播的.要求从早上6点到晚上11点不间断播放.剩余时间为关机状态. 图片部分还好说,就是viewpager弄一个无限 ...

  8. PHP 错误:Warning: Cannot modify header information - headers already sent by ...

    PHP初学者容易遇到的错误:Warning: Cannot modify header information - headers already sent by ...: 通常是由不正确使用 hea ...

  9. Visual Studio Code安装Python环境

    如何在全宇宙最强编辑器安装Python运行环境 (雾 首先安装Python2和Python3,如果只需要用到一个的话,直接安装即可运行,不存在转换问题. 安装Python扩展,直接搜索安装即可. 更改 ...

  10. 提供就医帮助的安卓APP

    首先 这是我们团队第一次开发安卓APP,也是我 个人第一个开发项目APP,俗话说:“万事开头难”.所以对于新手的我们来说,做好开发前的准备至关重要.凡事预则立不预则废! 首先我们团队这次开发的提供就医 ...