Python 中pandas索引切片读取数据缺掉数据处理成绩

发布时间: 2019-10-09 13:32:42 来源: 互联网 栏目: python 点击:

pandas是一个Python软件包,供给快速,灵活和富于表示力的数据构造,旨在使应用“关系”或“标记”数据既简单又直不雅。这篇文章重要简介了pandas索引切片读取数据缺掉数据处理,须要的同伙可以参考下

引入

  numpy曾经可以或许赞助我们处理数据,可以或许结合matplotlib处理我们数据分析的成绩,那么pandas进修的目标在甚么处所呢? numpy可以或许帮我们处理处理数值型数据,然则这还不敷 很多时辰,我们的数据除数值以外,还有字符串,还有时间序列等 比如:我们经过过程爬虫获得到了存储在数据库中的数据 比如:之前youtube的例子中除数值以外还有国度的信息,视频的分类(tag)信息,标题信息等 所以,numpy可以或许赞助我们处理数值,然则pandas除处理数值以外(基于numpy),还可以或许赞助我们处理其他类型的数据。

甚么是pandas?

  pandas是一个Python软件包,供给快速,灵活和富于表示力的数据构造,旨在使应用“关系”或“标记”数据既简单又直不雅。它旨在成为在Python中停止实际,真实世界数据分析的根本高等构建块。另外,其更广泛的目标是成为任何说话中可用的最强大年夜,最灵活的开源数据分析/操尴尬刁难象。它曾经朝着这个目标迈进了。

pandas的经常使用数据类型

  1、Series 一维,带标签数组

  2、DataFrame 二维,Series容器

(1)Series创建

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输入数据。

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

留意几个成绩:pd.Series无能甚么,可以或许传入甚么数据类型让其变成series构造。index是甚么,在甚么地位,关于我们罕见的数据库数据或许ndarray来讲,index究竟是甚么若何给一组数据指定index。

c = {"name":"lishuntao","age":18,"gender":"boy"}
t1 = pd.Series(c)
print(t1)
print(type(t1))
print(t1["name"])
print(t1["gender"])

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

重新给其绑定其他的索引以后,假设可以或许对应的上,就取其值,假设不克不及,就为Nan。如图所示:

import numpy as np
import pandas as pd

a = {"a":12,"name":"lishuntao","c":"xiaoc","age":18,"gender":"man"}

t1 = pd.Series(a)
print(t1)
print(type(t1))
t2 = pd.Series(a,index=list("abcdf"))
print(t2)

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

Series切片和索引

import numpy as np
import pandas as pd

a = {"a":12,"name":"lishuntao","c":"xiaoc","age":18,"gender":"man"}

t1 = pd.Series(a)
print(t1)
print(t1[:2])
print(t1[1])
print(t1[["a","c","gender"]])
print(t1[0:5:2])

import numpy as np
import pandas as pd

a = np.arange(12)
t1 = pd.Series(a)
print(t1)
print(t1[t1>9])

Series的索引和值

import numpy as np
import pandas as pd

a = np.arange(12)
t1 = pd.Series(a)
#print(t1)
print(t1.index)
print(t1.values)

import numpy as np
import pandas as pd

a = np.arange(12)
t1 = pd.Series(a)
print(t1)
print(type(t1.index))
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.

a = np.arange(12)
t1 = pd.Series(a)
print(t1)
#调换条件是False的情况 下面两个成果一样
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便可

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

和我们想象的有些差别,他是一个DataFrame,那么接上去我们就来懂得这类数据类型

然则,还有一个成绩:

关于数据库比如mysql或许mongodb中数据我们若何应用呢?

pd.read_sql(sql_sentence,connection)

那么,mongodb呢?(先用mongodb本身读出来,然后将它传入到DataFrame中,便可以完成读取)

(2)DataFrame的创建

pd.DataFrame(data,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)

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

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

行索引:注解不合行,横向索引,叫index,0轴,axis=0

列索引:注解不合列,纵向索引,叫columns,1轴,axis=1

自定义索引标签:

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

DataFrame的基本属性

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

DataFrame全体情况查询

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

着手:那么回到之前我们读取的狗名字统计的数据上,我们测验测验一下方才的办法

那么成绩来了:

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

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

t3 = t2.sort_values(by="Count_AnimalName",ascending=False)
print(t3)

那么成绩又来了:

假设我的数据有10列,我想按照个中的第1,第3,第8列排序,怎样办?

pandas之取行或许列

  方才我们知道了若何给数据按照某一行或许列排序,那么如今我们想伶仃研究应用次数前100的数据,应当若何做?

t2 = pd.read_csv("F:\BaiduNetdiskDownload\youtube_video_data\dogNames2.csv")
print(t2)

t3 = t2.sort_values(by="Count_AnimalName",ascending=False)
print(t3[:100])

我们详细要选择某一列该怎样选择呢?t2[" Count_AnimalName "]

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

pandas之loc取行数据

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

print(t2.loc["a","W"])
print(t2.loc["a",["W","Y"]])
print(type(t2.loc["a",["W","Y"]]))
print(t2.loc[["a","b"],["Z","Y"]])
print(t2.loc[:"c",:"Y"])
print(t2.loc["a":"b",["W","Z"]])

 2、t2.iloc 经过过程地位获得行数据(地位)

import numpy as np
import pandas as pd

t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
print(t2)
print(t2.iloc[0:2,0:4])
print(t2.iloc[[0,2],[1,3]])
t2.loc["a","Y"] = 100 #复制操作
print(t2)
t2.iloc[1:2,[1]] = 1000 #复制操作
print(t2)

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

  回到之前狗的名字的成绩上,假设我们想找到一切的应用次数逾越800的狗的名字,应当怎样选择?

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

回到之前狗的名字的成绩上,假设我们想找到一切的应用次数逾越700并且名字的字符串的长度大年夜于4的狗的名字,应当怎样选择?

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会

import numpy as np
import pandas as pd

t2 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("WXYZ"))
#print(t2)
t2.loc[:"b",["W","Y"]] = np.nan
print(t2)
print(pd.isnull(t2))
print(pd.notnull(t2))
#print(t2.dropna(axis=0,how="all",inplace=False))
#any只需含NaN就删除前面规定的行列,all须要的是行列全部为NAN才能删除
#填充数据
#print(t2.fillna(t2.mean()))
print(t2)
print(t2.fillna(t2.median()))
print(t2.fillna(0))

总结

以上所述是小编给大年夜家简介的Python 中pandas索引切片读取数据缺掉数据处理成绩,欲望对大年夜家有所赞助,假设大年夜家有任何疑问请给我留言,小编会及时答复大年夜家的。在此也异常感激大年夜家对我们网站的支撑!
假设你认为本文对你有赞助,迎接转载,烦请注明出处,感谢!

本文标题: Python 中pandas索引切片读取数据缺掉数据处理成绩
本文地址: http://yourctp.com/jiaoben/python/278098.html

假设认为本文对您有所赞助请赞助本站

付出宝扫一扫赞助微信扫一扫赞助

  • 付出宝扫一扫赞助
  • 微信扫一扫赞助
  • 付出宝先领红包再赞助
    声明:凡注明"本站原创"的一切文字图片等材料,版权均属编程客栈一切,迎接转载,但务请注明出处。
    详解python途径拼接os.path.join()函数的用法python图象处理模块Pillow的进修详解
    Top