美文网首页
pandas快速入门

pandas快速入门

作者: 蔬香四溢 | 来源:发表于2020-06-30 17:36 被阅读0次

pandas有两类数据对象:dataframe和series。Series是一个带标签的一维数组,通常索引在左,值在右。dataframe是一个带标签的二维数组,可以理解成series的字典,共用索引标签。重点记录dataframe的相关用法:

一.创建dataframe

1.如下图所示,主要是要Dataframe方法结合numpy函数可快速创建,以下演示了三种不同的创建方法:

#1.创建dataframe格式
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.random.randn(4,4),index=np.arange(4),columns=list('ABCD'))
df2=pd.DataFrame(np.arange(16).reshape(4,4),index=[1,2,3,4],columns=["A","B","C","D"])
df3=pd.DataFrame({"A":1,"B":2,"C":pd.date_range('20200201',periods=4),"D":pd.Series(1,index=[1,2,3,4])})
打印结果

二.查看数据

#查看数据
df1.head(1) #1查看头部第一行数据
df1.dtypes  #2查看列类型
df2.columns #2查看列名
df2.to_numpy() #3用numpy方法快速查看数据
df2.describe()  #4查看统计摘要
df2.T   #5行列互换,转置 
df2.sort_index(axis=1,ascending=False) #6按列轴大小排序
df2.sort_values(by="B") #7按列的B轴数值大小排序

1.首尾数据:head()/tail()

df1.head(1) / df1.tail(2)

2.显示索引、列名、列类型

df1.index / df1.columns / df1.dtypes

个人觉得:查看列类型在数据清洗中应该会用的比较多

image

3.查看列表数据:df2.to_numpy()

可以快速浏览dataframe对象中底层numpy数据,以numpy格式输出

4.查看统计摘要:describe()

包含NAN值统计概要,以描述数据离散和形状。其中表示所在列的:count数量,mean为均值,std为标准差,min最小值,max:最小值,20%、50%、75%为20、50、75的百分位数,50%也可以理解为中位数。

image

5.转置数据:

df2.T: 行列数据互换

image

6.按轴排序

df1.sort_index(axis=1,ascending=False)

即将表格的数据按照行、列轴上数值的大小排序后展示,当axis=1时,表示按照列轴排序,axis=0时,表示按照行轴排序,ascending为False表示按照倒序排列。

image

7.按值排序

df2.sort_values(by="B")

表示按照B轴的数值大小排序,默认为正序,可通过ascending设置倒序

image

三.筛选数据

1.按列筛选

筛选整列:df2['A'] df2.A 筛选两列:df2[['A','D']]

2.按切片筛选(按行筛选)

筛选行数据:df2[:2] ,它与标签筛选的区别在于不包含该结束点,如本例,只包行0,1的行的数据,不包含2的数据。 而标签会包行节点数据。

#按列和切片筛选数据
df2['A']        #1.按筛选列A的数据
df2[['A','D']]  #1.按筛选列A、D的数据
print(df2[2:3]) #2.按索引行位置2的筛选数据
print(df2.loc[2:3])#3.用loc标签按索引行位置2、3筛选数据
image

3.按标签筛选(按行筛选)

筛选行数据:df2.loc[2:3]

筛选某几行某几列数据:df2.loc[2:3,['A','B']]

返回降维数据:df2.loc[1,['A','B']]

提取标量值:df2.loc[index2[0],'A'],其中可以将index理解为一个series。

#按标签筛选
print(df2.loc[2:3,['A','B']]) #3.用loc标签按索引行位置2、3和列A、B筛选数据
print(df2.loc[1,['A','B']])   #3.用loc标签按索引行位置1和列A、B筛选数据,返回Series一维数据
A = df2.A                     #df2.A与df2["A"]方法等价
print(df2.loc[A[2],'A'])      #3.提取标量值,用df2.A中的标量4数据,用loc标签按索引行位置4和列A的数据,返回该位置的标量值
image

4.布尔型筛选

布尔型筛选主要是将True值的内容筛选出来,下列两例,分别是逻辑符号、isin识别数值、字符串类型的方法。

#布尔索引
df2[df2.A>8]     #4.返回df2.A>8布尔值为True的筛选结果数据
df2['E']=list('jsky') #对df2中的E行赋值
df2[df2['E'].isin(list('ky'))] #4.isin函数返回字符串匹配的布尔值为True的结果
image

5.位置筛选

主要使用iloc标签通过行列不同的位置切片获取到自己期望的数据,如下:

筛选某行数据:df2.iloc[:2]

筛选某行某列数据:df2.iloc[:2,0:2]

筛选具体的数值:df2.iloc[1,1]或df2.iat[1,1]

#位置索引
print(df2.iloc[:2])    #5.筛选索引行位置0、1的数据
print(df2.iloc[:2,0:2]) #5.筛选索引行位置0、1,列位置0、1的数据
print(df2.iloc[1,1])  #5.筛选索引行位置1,列位置1的数据
print(df2.iat[1,1])   #5.筛选索引行位置1,列位置1的数据
image

四、赋值

#赋值
df2['E']="K"                  #按列赋值
df2.iloc[0,0]=1000            #按位置赋值
df2.at[df2.index[0],"B"]=2000 #按标签赋值

通过将数据筛选出来后,进行赋值,如下例子:

image

五、缺失值

常见的缺失值处理有两种方法:忽略缺失值dropna,对缺失值重新赋值fillna.下面将通过reindex方法创建一个新的dataframe用于练习缺失值的处理,如图所示。(reindex:重建索引可更改、输出、添加指定轴索引,返回数据副本,不更改原数据)

忽略缺失值:df4.dropna(how='any')

缺失值重新赋值:df4.fillna('5')

#缺失值
df4=df2.reindex(index=[0,1,2,3,4,5],columns=list(df2.columns)+['E'])
df4.loc[1:3,'E']=1
df4.dropna(how='any')#忽略任何一行缺失值数据
df4.fillna('5')#对含有缺失值的数据重新赋值
df4.isna()#布尔关系
image

六、运算

一般情况下,运算时排除缺失值;运算时,axis默认为0,表示按列计算;axis=1表示按行计算,pandas自动沿指定维度广播。以mean(均值)和sum(求和)为例。

#运算
print(df2.mean())
df2.sum(axis=1)
image
函数名称 说明
pd.mean() pd.mean(0)或axis=0默认表示把dataframe的列和求平均,按行扩展;pd.mean(1)表示把dataframe的行和求平均;skipna:统计时是否排除缺失值,默认值为True
pd.sum() pd.sum(0)默认表示把dataframe的列求和,按行扩展pd.sum(1)默认表示把dataframe的行求和
pd.count() 非NA值的数量,0表示各列计数;1表示各行的计数值
Pd.describe() 针对Series或各dataframe列计算汇总统计
pd.min()/pd.max() 最小值或最大值,0表示各列的最大值,1表示各行的最大值
pd.idxmin()/pd.idxmax() 获得到最小值或最大值的索引值,0表示各列,1表示各行
pd.quantile() 样本的分位数,0表示各列,1表示各行
pd.median() 值的算术中位数(50%分位数,2分位数,中位数),0表示各列,1表示各行
pd.mad() 根据平均值计算绝对离差,0表示各列,1表示各行
pd.var()/pd.std() 样本值的方差/标准差,0表示各列,1表示各行
pd.cumsum() 默认按照行累加,即计算当前行与前面所有行之和

七、函数Apply

apply方法应用numpy自带的函数,自定义的函数等,其中axis默认为0表示按行计算,按列广播;axis=1表示按列计算,按行广播。按详见以下案例:

#函数
print(df2.apply(lambda X: X.max()-1,axis=1))
df2.apply(np.cumsum)
df2.cumsum(axis=1)
image

其中cumsum为按行累加,等价于df2.cumsum()方法,表示计算当前行与前面所有行之和。图上例子表示的正是按行累加,按列广播的效果。

八、直方图

直方图在统计学里表示数据的分布的趋势,通常用它来表示数据的变化趋势,在pandas中可以用value_counts()来表示series数据的出现频次,用mode()表示series和dataframe中的不重复的数据。

image image

九、字符串的处理

1.字符串类型的定义:使用astype("string")方法,或在创建pandas对象时定义,如:dtype="string"或dtype=pd.StringDtype()

2.常见的字符串的处理有:str方法只适合series数据

去除空格【str.strip()、str.lstrip()、str.rstrip()】,大小写转换【str.lower()、str.upper()】,

字符串长度【str.len()】、统计字符串a出现的次数【str.count("a")】,是否是数字的布尔判断【str.isdigt()】、是否与某个字符串a匹配的布尔判断【str.match("a")】

十、合并(concat/merge/append)

1.结合-concat
把多串数组或Series组合在一起,成为dataframe

#合并-结合concat
df4=pd.DataFrame(np.random.randn(10,4))
pieces=[df4[:3],df4[3:7]]
pd.concat(pieces)
image
2.连接-merge
将两个表的数据连接在一起,有点像sql中的inner..join..的用法,根据连接关键字段将两个表的数据连接一起呈现,如下图所示
#连接join用法-merge,有点类似数据库的跨表查询
left=pd.DataFrame({"name":['Amily',"Jack"],"Country":["US","Canada"],"year":[12,22]})
right=pd.DataFrame({'name':["Amily","Amily"],"join_time":['2020-01-02',"2020-02-01"]})
print(left,"\n\n",right)
pd.merge(left,right,on="name")
image
3.追加-append
将一个数组,series或dataframe表格添加到另外一个dataframe表格上,如下图所示,注意:当数组和series追加是添加行数据,按照列的位置填入,若有超出的列或不足的列位置,用NA(np.nan、none)表示;当追加的数据是dataframe时,将会匹配列名,若无法匹配,则直接添加为新列,如下图所示
#追加append
df4.append(df2["B"])
df4.append(df2[["B","C"]])
image

十一、分组(groupby)

通过groupby()可以将dataframe中的某一列按类别分组,结合运算函数比如sum(),count()等函数就可以实现将表格按照分组计算的功能

image

十二、重塑和堆叠(stack)

Dataframe具有多重索引的功能,利用MultiIndexf方法可定义多个索引。而stack是将DataFrame的列标签压缩为行标签,unstack()而是将多个行标签转换为列标签,其中unstack(0),unstack(1)表示从顶级行标签到末级行标签进行转换。

image image

十三、数据透视表

运用pd.pivot_table()方法可以对二维数据中的数据,按照需求快速建立新表,进行按照各维度快速分类计算,结合运算函数的方法,以便更好的了解数据规律。其中values为透视表中用来作为计算和展示的数据。

image

十四、时间序列(timeseries)

主要通过pd.to_timedate和pd.date_range将普通数据转化为时间类型的数据,生成时间类型的标量数据,在pandas中进行时间相关的计算。简单用法如下:

#转化其他类型的数据为时间戳
t1=pd.to_datetime(['2010-01-10','Jul 31, 2009','2020/10/1'])
t2=pd.to_datetime(pd.Series(['2020-02-10','Jul 31, 2009','2020/10/1']))
t3=pd.to_datetime("2020.10.1")
#date_range的defalut-freq
t12=pd.date_range(start="2020-01-01",periods=10)

十五、类别型(Categoricals)

1.astype("category):创建类别型的series数据
2.series.cat.categories:修改现有series中的类别名称
3.series.cat.set_categories:生成新的series类别名称
4.sort_values排序,是按照生成类别时的位置顺序来排的
4.groupby按类分组,如果空值的类也会显示出来,显示为0,如图

#类别型数据
#astype("category")创建类型数据
df=pd.DataFrame({"id":[1,2,3,4,5,6],
                "raw_grade":["a","a","b","b","b","d"]})
#1.创建新的grade类,并对这个新的类按照raw_grade赋值,并将数据类型改
df["grade"]=df['raw_grade'].astype('category') 为category类型
print(df["grade"]) #打印该列出来,可以看到dtype为category类型,及其具体的类型值 :Categories (3, object): [a, b, d]

#2.修改类型数据中的分类名称
df["grade"].cat.categories=["very good","good","very bad"] #series.cat.categories对grade列中的类别名称进行重定义

#3.建立grade1列使用Series.cat.set_categories方法将建立新类
df["grade1"]=df["grade"].cat.set_categories(["very bad","bad","very good","good"])
print(df["grade1"])#筛选该列series出来有4类,即定义的4类:Categories (4, object): [very bad, bad, very good, good]

#4.这里排序,是按照生成类别时的位置顺序来排的
print(df.sort_values(by="grade1") )
#5.分组的类如果有控制也会显示出来,显示为0
print(df.groupby("grade1").count())
用法打印结果

十六、可视化(plot)

#可视化
ts=pd.Series(np.random.randn(1000),index=pd.date_range("2018.01.01",periods=1000))
ts=ts.cumsum()
ts.plot() #plot绘制series的图形

#Dataframe绘制plot图表
df10=pd.DataFrame(np.random.randn(1000,4),index=pd.date_range("2018.01.01",periods=1000),columns=list("ABCD"))
df10 = df10.cumsum()
df10.plot()
Series和dataframe使用plot生成的图形

十七、数据输入 / 输出

1.CSV文件的读写:

#读取 CSV 文件数据:
pd.read_csv('foo.csv')
#写入CSV文件:
df10.to_csv('foo.csv')

2.Excel文件的读写:

#读取 Excel文件数据:
pd.read_excel('foo.xlsx',“sheet1”,index_col=None, na_values=['NA'])
#写入Excel文件:
df10.to_excel('foo.xlsx', sheet_name='Sheet1')

3.读取HDF5文件:HDF5是一种跨平台数据储存文件

#读取 HDF5文件数据:
pd.read_hdf('foo.h5', 'df')
#写入HDF5文件:
df.to_hdf('foo.h5', 'df')

相关文章

  • pandas快速入门

    pandas快速入门 参考10 Minutes to pandas 目录 创建对象 数据视图 数据选取 数据缺失的...

  • python合道-常规Pandas(1)

    简介 Pandas 中文文档 快速入门 Pandas---Series 系列(Series)是带有标签的一维数组。...

  • 利用Python进行数据分析

    pandas快速入门http://www.jianshu.com/p/d630c14d3ea0pandas教程ht...

  • pandas入门

    pandas入门 简介 pandas包含的数据结构和操作工具能快速简单地清洗和分析数据。 pandas经常与Num...

  • Pandas 快速入门

    Pandas 介绍 Pandas是python的一个数据分析包, 纳入了大量库和一些标准的数据模型,提供了高效地操...

  • pandas快速入门

    pandas有两类数据对象:dataframe和series。Series是一个带标签的一维数组,通常索引在左,值...

  • pandas小案例

    markdown太坑!!本文参见:十分钟快速入门Pandas入门可参照:官方文档入门基础知识可参照:官方文档基础知...

  • pandas入门 01 快速入门

    1 Object Creation 通过list创建Series,使用默认的np.arange(n)作为index...

  • Pandas快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识。出于机器学习实践过程中的需要,我快速了解了一下提供了类似关系型...

  • Pandas快速入门(二)

    继Pandas快速入门(一),接着写: 布尔索引 过滤 使用 isin() 方法过滤: 赋值 虽然用于选择和赋值的...

网友评论

      本文标题:pandas快速入门

      本文链接:https://www.haomeiwen.com/subject/fslxqktx.html