建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

Pandas之:Pandas简洁教程

GG网络技术分享 2025-03-18 16:09 2


简介

pandas是建立在Python编程语言之上的一种快速,强大,灵活且易于使用的开源数据分析和处理工具,它含有使数据清洗和分析⼯

作变得更快更简单的数据结构和操作⼯具。pandas经常和其它⼯具⼀同使⽤,如数值计算⼯具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib等。

pandas是基于NumPy数组构建的,虽然pandas采⽤了⼤量的NumPy编码⻛格,但⼆者最⼤的不同是pandas是专⻔为处理表格和混杂数据设计的。⽽NumPy更适合处理统⼀的数值数组数据。

本文是关于Pandas的简洁教程。

对象创建

因为Pandas是基于NumPy数组来构建的,所以我们在引用的时候需要同时引用Pandas和NumPy:

In [1]:importnumpyasnp

In [2]:importpandasaspd

Pandas中最主要的两个数据结构是Series和DataFrame。

Series和一维数组很相似,它是由NumPy的各种数据类型来组成的,同时还包含了和这组数据相关的index。

我们来看一个Series的例子:

In[3]:pd.Series([1,3,5,6,8])Out[3]:0113253648dtype:int64

左边的是索引,右边的是值。因为我们在创建Series的时候并没有指定index,所以index是从0开始到n-1结束。

Series在创建的时候还可以传入np.nan表示空值:

In[4]:pd.Series([1,3,5,np.nan,6,8])Out[4]:01.013.025.03NaN46.058.0dtype:float64

DataFrame是⼀个表格型的数据结构,它含有⼀组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。

DataFrame既有⾏索引也有列索引,它可以被看做由Series组成的字典(共⽤同⼀个索引)。

看一个创建DataFrame的例子:

In[5]: dates = pd.date_range(20201201, periods=6)

In [6]: dates

Out[6]:

DatetimeIndex([2020-12-01,2020-12-02,2020-12-03,2020-12-04,2020-12-05,2020-12-06],

dtype=datetime64[ns], freq=D)

上面我们创建了一个index的list。

然后使用这个index来创建一个DataFrame:

In[7]:pd.DataFrame(np.random.randn(6,4),index=dates,columns=list(ABCD))Out[7]:ABCD2020-12-011.536312-0.318095-0.7379560.1433522020-12-021.3252210.065641-2.763370-0.1305112020-12-03-1.143560-0.8058070.1747220.4270272020-12-04-0.7242060.050155-0.648675-0.6451662020-12-050.1824110.9563850.349465-0.4840402020-12-061.8571081.245928-0.767316-1.890586

上面的DataFrame接收三个参数,第一个参数是DataFrame的表格数据,第二个参数是index的值,也可以看做是行名,第三个参数是列名。

还可以直接传入一个字典来创建一个DataFrame:

In[9]:pd.DataFrame({A:1.,...:B:pd.Timestamp(20201202),...:C:pd.Series(1,index=list(range(4)),dtype=float32),...:D:np.array([3]*4,dtype=int32),...:E:pd.Categorical(["test","train","test","train"]),...:F:foo})...:Out[9]:ABCDEF01.02020-12-021.03testfoo11.02020-12-021.03trainfoo21.02020-12-021.03testfoo31.02020-12-021.03trainfoo

上面的DataFrame中,每个列都有不同的数据类型。

我们用个图片来更好的理解DataFrame和Series:

它就像是Excel中的表格,带有行头和列头。

DataFrame中的每一列都可以看做是一个Series:

查看数据

创建好Series和DataFrame之后,我们就可以查看他们的数据了。

Series可以通过index和values来获取其索引和值信息:

In[10]:data1=pd.Series([1,3,5,np.nan,6,8])In[12]:data1.indexOut[12]:RangeIndex(start=0,stop=6,step=1)In[14]:data1.valuesOut[14]:array([1.,3.,5.,nan,6.,8.])

DataFrame可以看做是Series的集合,所以DataFrame带有更多的属性:

In[16]:df.head()Out[16]:ABCD2020-12-010.446248-0.060549-0.445665-1.3925022020-12-02-1.119749-1.659776-0.6186561.9715992020-12-030.6108460.2169370.8212580.8058182020-12-040.4901050.7324210.547129-0.4432742020-12-05-0.475531-0.8531410.1600170.986973In[17]:df.tail(3)Out[17]:ABCD2020-12-040.4901050.7324210.547129-0.4432742020-12-05-0.475531-0.8531410.1600170.9869732020-12-060.288091-2.1643230.193989-0.197923

head跟tail分别取得DataFrame的头几行和尾部几行。

同样的DataFrame也有index和columns:

In[19]:df.indexOut[19]:DatetimeIndex([2020-12-01,2020-12-02,2020-12-03,2020-12-04,2020-12-05,2020-12-06],dtype=datetime64[ns],freq=D)In[20]:df.valuesOut[20]:array([[0.44624818,-0.0605494,-0.44566462,-1.39250227],[-1.11974917,-1.65977552,-0.61865617,1.97159943],[0.61084596,0.2169369,0.82125808,0.80581847],[0.49010504,0.73242082,0.54712889,-0.44327351],[-0.47553134,-0.85314134,0.16001748,0.98697257],[0.28809148,-2.16432292,0.19398863,-0.19792266]])

describe方法可以对数据进行统计:

In[26]:df.describe()Out[26]:ABCDcount6.0000006.0000006.0000006.000000mean0.040002-0.6314050.1096790.288449std0.6878721.1280190.5560991.198847min-1.119749-2.164323-0.618656-1.39250225%-0.284626-1.458117-0.294244-0.38193650%    0.367170-0.4568450.1770030.30394875%    0.4791410.1475650.4588440.941684max0.6108460.7324210.8212581.971599

还可以对DataFrame进行转置:

In[27]:df.TOut[27]:2020-12-012020-12-022020-12-032020-12-042020-12-052020-12-06A0.446248-1.1197490.6108460.490105-0.4755310.288091B-0.060549-1.6597760.2169370.732421-0.853141-2.164323C-0.445665-0.6186560.8212580.5471290.1600170.193989D-1.3925021.9715990.805818-0.4432740.986973-0.197923

可以按行和按列进行排序:

In[28]:df.sort_index(axis=1,ascending=False)Out[28]:DCBA2020-12-01-1.392502-0.445665-0.0605490.4462482020-12-021.971599-0.618656-1.659776-1.1197492020-12-030.8058180.8212580.2169370.6108462020-12-04-0.4432740.5471290.7324210.4901052020-12-050.9869730.160017-0.853141-0.4755312020-12-06-0.1979230.193989-2.1643230.288091In[29]:df.sort_values(by=B)Out[29]:ABCD2020-12-060.288091-2.1643230.193989-0.1979232020-12-02-1.119749-1.659776-0.6186561.9715992020-12-05-0.475531-0.8531410.1600170.9869732020-12-010.446248-0.060549-0.445665-1.3925022020-12-030.6108460.2169370.8212580.8058182020-12-040.4901050.7324210.547129-0.443274

选择数据

通过DataFrame的列名,可以选择代表列的Series:

In[30]:df[A]Out[30]:2020-12-010.4462482020-12-02-1.1197492020-12-030.6108462020-12-040.4901052020-12-05-0.4755312020-12-060.288091Freq:D,Name:A,dtype:float64

通过切片可以选择行:

In[31]:df[0:3]Out[31]:ABCD2020-12-010.446248-0.060549-0.445665-1.3925022020-12-02-1.119749-1.659776-0.6186561.9715992020-12-030.6108460.2169370.8212580.805818

或者这样:

In[32]:df[20201202:20201204]Out[32]:ABCD2020-12-02-1.119749-1.659776-0.6186561.9715992020-12-030.6108460.2169370.8212580.8058182020-12-040.4901050.7324210.547129-0.443274

loc和iloc

使用loc可以使用轴标签来选取数据。

In[33]:df.loc[:,[A,B]]Out[33]:AB2020-12-010.446248-0.0605492020-12-02-1.119749-1.6597762020-12-030.6108460.2169372020-12-040.4901050.7324212020-12-05-0.475531-0.8531412020-12-060.288091-2.164323

前面是行的选择,后面是列的选择。

还可以指定index的名字:

In[34]:df.loc[20201202:20201204,[A,B]]Out[34]:AB2020-12-02-1.119749-1.6597762020-12-030.6108460.2169372020-12-040.4901050.732421

如果index的名字不是切片的话,将会给数据降维:

In[35]:df.loc[20201202, [A,B]]Out[35]:A-1.119749B-1.659776Name: 2020-12-0200:00:00,dtype:float64

如果后面列是一个常量的话,直接返回对应的值:

In[37]:df.loc[20201202,A]Out[37]:-1.1197491665145112

iloc是根据值来选取数据,比如我们选择第三行:

In[42]:df.iloc[3]Out[42]:A0.490105B0.732421C0.547129D-0.443274Name: 2020-12-0400:00:00,dtype:float64

它其实和df.loc[‘2020-12-04’]是等价的:

In[41]:df.loc[2020-12-04]Out[41]:A0.490105B0.732421C0.547129D-0.443274Name: 2020-12-0400:00:00,dtype:float64

同样可以传入切片:

In[43]:df.iloc[3:5,0:2]Out[43]:AB2020-12-040.4901050.7324212020-12-05-0.475531-0.853141

可以传入list:

In[44]:df.iloc[[1,2,4],[0,2]]Out[44]:AC2020-12-02-1.119749-0.6186562020-12-030.6108460.8212582020-12-05-0.4755310.160017

取具体某个格子的值:

In[45]:df.iloc[1, 1]Out[45]:-1.6597755161871708

布尔索引

DataFrame还可以通过布尔值来进行索引,下面是找出列A中所有元素大于0的:

In[46]:df[df[A]

标签:

提交需求或反馈

Demand feedback